1
0
mirror of https://invent.kde.org/system/dolphin synced 2024-07-04 17:30:55 +00:00

Port KRun to OpenUrlJob

In DolphinMainWindow, since KRun allows running executables by default, use
setRunExecutables(true) so as not to change the behaviour.

Remove the now redundant slotHandleUrlStatFinished, that whole StatJob
logic is now handled by OpenUrlJob.

Bump KF required version to 5.73, since that's where
OpenUrlJob::setShowOpenOrExecuteDialog was introduced.
This commit is contained in:
Ahmad Samir 2020-08-18 08:43:58 +00:00 committed by David Faure
parent 864b59fcf1
commit 257eeebf4b
4 changed files with 34 additions and 36 deletions

View File

@ -8,7 +8,7 @@ set (RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE
project(Dolphin VERSION ${RELEASE_SERVICE_VERSION})
set(QT_MIN_VERSION "5.11.0")
set(KF5_MIN_VERSION "5.71.0")
set(KF5_MIN_VERSION "5.73.0")
# ECM setup
find_package(ECM ${KF5_MIN_VERSION} CONFIG REQUIRED)

View File

@ -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();
}
}

View File

@ -54,6 +54,10 @@ class QIcon;
class PlacesPanel;
class TerminalPanel;
namespace KIO {
class OpenUrlJob;
}
/**
* @short Main window for Dolphin.
*
@ -432,12 +436,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;

View File

@ -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)