diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/dolphinmainwindow.cpp | 26 | ||||
| -rw-r--r-- | src/dolphinmainwindow.h | 7 |
2 files changed, 31 insertions, 2 deletions
diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index d358ad733..da4cab597 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -121,7 +121,8 @@ DolphinMainWindow::DolphinMainWindow(int id) : m_actionHandler(0), m_remoteEncoding(0), m_settingsDialog(0), - m_captionStatJob(0) + m_captionStatJob(0), + m_lastHandleUrlStatJob(0) { setObjectName("Dolphin#"); @@ -1132,7 +1133,28 @@ void DolphinMainWindow::showSearchOptions() void DolphinMainWindow::handleUrl(const KUrl& url) { - if (KProtocolManager::supportsListing(url)) { + delete m_lastHandleUrlStatJob; + m_lastHandleUrlStatJob = 0; + + if (url.isLocalFile() && QFileInfo(url.toLocalFile()).isDir()) { + activeViewContainer()->setUrl(url); + } else if (KProtocolManager::supportsListing(url)) { + // stat the URL to see if it is a dir or not + m_lastHandleUrlStatJob = KIO::stat(url, KIO::HideProgressInfo); + connect(m_lastHandleUrlStatJob, SIGNAL(result(KJob*)), + this, SLOT(slotHandleUrlStatFinished(KJob*))); + + } else { + new KRun(url, this); + } +} + +void DolphinMainWindow::slotHandleUrlStatFinished(KJob* job) +{ + m_lastHandleUrlStatJob = 0; + const KIO::UDSEntry entry = static_cast<KIO::StatJob*>(job)->statResult(); + const KUrl url = static_cast<KIO::StatJob*>(job)->url(); + if ( entry.isDir() ) { activeViewContainer()->setUrl(url); } else { new KRun(url, this); diff --git a/src/dolphinmainwindow.h b/src/dolphinmainwindow.h index 6c2089fcf..7479c05b1 100644 --- a/src/dolphinmainwindow.h +++ b/src/dolphinmainwindow.h @@ -424,6 +424,12 @@ private slots: void handleUrl(const KUrl& url); /** + * handleUrl() can trigger a stat job to see if the url can actually + * be listed. + */ + void slotHandleUrlStatFinished(KJob* job); + + /** * setUrlAsCaption() will trigger a stat job which reports its result in * this slot. */ @@ -555,6 +561,7 @@ private: QPointer<DolphinSettingsDialog> m_settingsDialog; KJob* m_captionStatJob; + KJob* m_lastHandleUrlStatJob; }; inline DolphinViewContainer* DolphinMainWindow::activeViewContainer() const |
