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:
parent
864b59fcf1
commit
257eeebf4b
|
@ -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)
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue
Block a user