m_actionHandler(0),
m_remoteEncoding(0),
m_settingsDialog(0),
- m_captionStatJob(0)
+ m_captionStatJob(0),
+ m_lastHandleUrlStatJob(0)
{
setObjectName("Dolphin#");
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);
*/
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.
QPointer<DolphinSettingsDialog> m_settingsDialog;
KJob* m_captionStatJob;
+ KJob* m_lastHandleUrlStatJob;
};
inline DolphinViewContainer* DolphinMainWindow::activeViewContainer() const