X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/6072005ddce81b456fdcf2e77d5156a1d86f3686..e9a39700:/src/panels/terminal/terminalpanel.cpp diff --git a/src/panels/terminal/terminalpanel.cpp b/src/panels/terminal/terminalpanel.cpp index 131d16630..fdc6c64bb 100644 --- a/src/panels/terminal/terminalpanel.cpp +++ b/src/panels/terminal/terminalpanel.cpp @@ -5,7 +5,6 @@ */ #include "terminalpanel.h" -#include "kiofuse_interface.h" #include #include @@ -17,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -68,7 +68,7 @@ QString TerminalPanel::currentWorkingDirectory() void TerminalPanel::terminalExited() { m_terminal = nullptr; - emit hideTerminalPanel(); + Q_EMIT hideTerminalPanel(); } bool TerminalPanel::isHiddenInVisibleWindow() const @@ -186,13 +186,21 @@ void TerminalPanel::changeDir(const QUrl& url) if (url.isLocalFile()) { sendCdToTerminal(url.toLocalFile()); - } else { + return; + } + + // Try stat'ing the url; note that mostLocalUrl only works with ":local" protocols + if (KProtocolInfo::protocolClass(url.scheme()) == QLatin1String(":local")) { m_mostLocalUrlJob = KIO::mostLocalUrl(url, KIO::HideProgressInfo); if (m_mostLocalUrlJob->uiDelegate()) { KJobWidgets::setWindow(m_mostLocalUrlJob, this); } connect(m_mostLocalUrlJob, &KIO::StatJob::result, this, &TerminalPanel::slotMostLocalUrlResult); + return; } + + // Last chance, try KIOFuse + sendCdToTerminalKIOFuse(url); } void TerminalPanel::sendCdToTerminal(const QString& dir, HistoryPolicy addToHistory) @@ -230,6 +238,21 @@ void TerminalPanel::sendCdToTerminal(const QString& dir, HistoryPolicy addToHist } } +void TerminalPanel::sendCdToTerminalKIOFuse(const QUrl &url) { + // URL isn't local, only hope for the terminal to be in sync with the + // DolphinView is to mount the remote URL in KIOFuse and point to it. + // If we can't do that for any reason, silently fail. + auto reply = m_kiofuseInterface.mountUrl(url.toString()); + QDBusPendingCallWatcher * watcher = new QDBusPendingCallWatcher(reply, this); + QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] (QDBusPendingCallWatcher* watcher) { + watcher->deleteLater(); + if (!reply.isError()) { + // Successfully mounted, point to the KIOFuse equivalent path. + sendCdToTerminal(reply.value()); + } + }); +} + void TerminalPanel::slotMostLocalUrlResult(KJob* job) { KIO::StatJob* statJob = static_cast(job); @@ -237,18 +260,7 @@ void TerminalPanel::slotMostLocalUrlResult(KJob* job) if (url.isLocalFile()) { sendCdToTerminal(url.toLocalFile()); } else { - // URL isn't local, only hope for the terminal to be in sync with the - // DolphinView is to mount the remote URL in KIOFuse and point to it. - // If we can't do that for any reason, silently fail. - auto reply = m_kiofuseInterface.mountUrl(url.toString()); - QDBusPendingCallWatcher * watcher = new QDBusPendingCallWatcher(reply, this); - QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] (QDBusPendingCallWatcher* watcher) { - watcher->deleteLater(); - if (!reply.isError()) { - // Successfully mounted, point to the KIOFuse equivalent path. - sendCdToTerminal(reply.value()); - } - }); + sendCdToTerminalKIOFuse(url); } m_mostLocalUrlJob = nullptr; @@ -274,7 +286,7 @@ void TerminalPanel::slotKonsolePartCurrentDirectoryChanged(const QString& dir) KMountPoint::Ptr mountPoint = KMountPoint::currentMountPoints().findByPath(m_konsolePartCurrentDirectory); if (mountPoint && mountPoint->mountType() != QStringLiteral("fuse.kio-fuse")) { // Not in KIOFUse mount, so just switch to the corresponding URL. - emit changeUrl(url); + Q_EMIT changeUrl(url); return; } @@ -284,11 +296,11 @@ void TerminalPanel::slotKonsolePartCurrentDirectoryChanged(const QString& dir) watcher->deleteLater(); if (reply.isError()) { // KIOFuse errored out... just show the normal URL - emit changeUrl(url); + Q_EMIT changeUrl(url); } else { // Our location happens to be in a KIOFuse mount and is mounted. // Let's change the DolphinView to point to the remote URL equivalent. - emit changeUrl(QUrl::fromUserInput(reply.value())); + Q_EMIT changeUrl(QUrl::fromUserInput(reply.value())); } }); }