┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/dolphinmainwindow.cpp26
-rw-r--r--src/dolphinmainwindow.h7
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