diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/dolphinmainwindow.cpp | 47 | ||||
| -rw-r--r-- | src/dolphinmainwindow.h | 12 | ||||
| -rw-r--r-- | src/dolphinviewcontainer.cpp | 9 |
3 files changed, 33 insertions, 35 deletions
diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 5741e8943..0aafe3ad6 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -57,13 +57,13 @@ #include <KIO/CommandLauncherJob> #include <KIO/JobUiDelegate> #include <KIO/OpenFileManagerWindowJob> +#include <KIO/OpenUrlJob> #include <KJobWidgets> #include <KLocalizedString> #include <KMessageBox> #include <KNS3/KMoreToolsMenuFactory> #include <KProtocolInfo> #include <KProtocolManager> -#include <KRun> #include <KShell> #include <KStandardAction> #include <KStartupInfo> @@ -114,7 +114,7 @@ DolphinMainWindow::DolphinMainWindow() : m_bookmarkHandler(nullptr), m_controlButton(nullptr), m_updateToolBarTimer(nullptr), - m_lastHandleUrlStatJob(nullptr), + m_lastHandleUrlOpenJob(nullptr), m_terminalPanel(nullptr), m_placesPanel(nullptr), m_tearDownFromPlacesRequested(false), @@ -1036,34 +1036,31 @@ void DolphinMainWindow::editSettings() void DolphinMainWindow::handleUrl(const QUrl& url) { - delete m_lastHandleUrlStatJob; - m_lastHandleUrlStatJob = nullptr; + delete m_lastHandleUrlOpenJob; + m_lastHandleUrlOpenJob = nullptr; 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); - if (m_lastHandleUrlStatJob->uiDelegate()) { - KJobWidgets::setWindow(m_lastHandleUrlStatJob, this); - } - connect(m_lastHandleUrlStatJob, &KIO::Job::result, - this, &DolphinMainWindow::slotHandleUrlStatFinished); - } else { - new KRun(url, this); // Automatically deletes itself after being finished - } -} + m_lastHandleUrlOpenJob = new KIO::OpenUrlJob(url); + m_lastHandleUrlOpenJob->setUiDelegate(new KIO::JobUiDelegate(KJobUiDelegate::AutoHandlingEnabled, this)); + m_lastHandleUrlOpenJob->setRunExecutables(true); -void DolphinMainWindow::slotHandleUrlStatFinished(KJob* job) -{ - m_lastHandleUrlStatJob = nullptr; - const KIO::UDSEntry entry = static_cast<KIO::StatJob*>(job)->statResult(); - const QUrl url = static_cast<KIO::StatJob*>(job)->url(); - if (entry.isDir()) { - activeViewContainer()->setUrl(url); - } else { - new KRun(url, this); // Automatically deletes itself after being finished + connect(m_lastHandleUrlOpenJob, &KIO::OpenUrlJob::mimeTypeFound, this, + [this, url](const QString &mimetype) { + if (mimetype == QLatin1String("inode/directory")) { + // If it's a dir, we'll take it from here + m_lastHandleUrlOpenJob->kill(); + m_lastHandleUrlOpenJob = nullptr; + activeViewContainer()->setUrl(url); + } + }); + + connect(m_lastHandleUrlOpenJob, &KIO::OpenUrlJob::result, this, [this]() { + m_lastHandleUrlOpenJob = nullptr; + }); + + m_lastHandleUrlOpenJob->start(); } } diff --git a/src/dolphinmainwindow.h b/src/dolphinmainwindow.h index 9c36c98b2..59e0afa31 100644 --- a/src/dolphinmainwindow.h +++ b/src/dolphinmainwindow.h @@ -54,6 +54,10 @@ class QIcon; class PlacesPanel; class TerminalPanel; +namespace KIO { + class OpenUrlJob; +} + /** * @short Main window for Dolphin. * @@ -433,12 +437,6 @@ private slots: void handleUrl(const QUrl& url); /** - * handleUrl() can trigger a stat job to see if the url can actually - * be listed. - */ - void slotHandleUrlStatFinished(KJob* job); - - /** * Is invoked when the write state of a folder has been changed and * enables/disables the "Create New..." menu entry. */ @@ -644,7 +642,7 @@ private: QToolButton* m_controlButton; QTimer* m_updateToolBarTimer; - KIO::Job* m_lastHandleUrlStatJob; + KIO::OpenUrlJob *m_lastHandleUrlOpenJob; TerminalPanel* m_terminalPanel; PlacesPanel* m_placesPanel; diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index 4ab34a06a..7809ca7e3 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -38,10 +38,11 @@ #include <KFileItemActions> #include <KFilePlacesModel> #include <KIO/PreviewJob> +#include <KIO/OpenUrlJob> +#include <KIO/JobUiDelegate> #include <KLocalizedString> #include <KMessageWidget> #include <KProtocolManager> -#include <KRun> #include <KShell> #include <KUrlComboBox> #include <KUrlNavigator> @@ -645,8 +646,10 @@ void DolphinViewContainer::slotItemActivated(const KFileItem& item) return; } - KRun *run = new KRun(item.targetUrl(), this); - run->setShowScriptExecutionPrompt(true); + KIO::OpenUrlJob *job = new KIO::OpenUrlJob(item.targetUrl()); + job->setUiDelegate(new KIO::JobUiDelegate(KJobUiDelegate::AutoHandlingEnabled, this)); + job->setShowOpenOrExecuteDialog(true); + job->start(); } void DolphinViewContainer::slotItemsActivated(const KFileItemList& items) |
