From: Sebastian Trueg Date: Mon, 15 Mar 2010 09:55:51 +0000 (+0000) Subject: Stat URLs before opening them to make sure they are actually dirs we can list. Otherw... X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/fa24cc8e115e785cc02d0d3d3bf0c1574c783f63?ds=inline Stat URLs before opening them to make sure they are actually dirs we can list. Otherwise use KRun. svn path=/trunk/KDE/kdebase/apps/; revision=1103520 --- 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(job)->statResult(); + const KUrl url = static_cast(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 @@ -423,6 +423,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 m_settingsDialog; KJob* m_captionStatJob; + KJob* m_lastHandleUrlStatJob; }; inline DolphinViewContainer* DolphinMainWindow::activeViewContainer() const