]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinmainwindow.cpp
Port to KTerminalLauncherJob
[dolphin.git] / src / dolphinmainwindow.cpp
index fe39d4d2fbabf7e298cf0aef52d79e377ccce393..f3a5e3b4e89539fbc3d720b3f1874d7926701e65 100644 (file)
 #include <KStandardAction>
 #include <KStartupInfo>
 #include <KSycoca>
+#include <KTerminalLauncherJob>
 #include <KToggleAction>
 #include <KToolBar>
 #include <KToolBarPopupAction>
-#include <KToolInvocation>
 #include <KUrlComboBox>
 #include <KUrlNavigator>
 #include <KWindowSystem>
@@ -211,11 +211,9 @@ DolphinMainWindow::DolphinMainWindow() :
     QTimer::singleShot(0, this, &DolphinMainWindow::updateOpenPreferredSearchToolAction);
 
     m_fileItemActions.setParentWidget(this);
-#if KIO_VERSION >= QT_VERSION_CHECK(5, 82, 0)
     connect(&m_fileItemActions, &KFileItemActions::error, this, [this](const QString &errorMessage) {
         showErrorMessage(errorMessage);
     });
-#endif
 }
 
 DolphinMainWindow::~DolphinMainWindow()
@@ -239,20 +237,6 @@ QVector<DolphinViewContainer*> DolphinMainWindow::viewContainers() const
     return viewContainers;
 }
 
-void DolphinMainWindow::setViewsWithInvalidPathsToHome()
-{
-    const QVector<DolphinViewContainer*> theViewContainers = viewContainers();
-    for (DolphinViewContainer *viewContainer : theViewContainers) {
-
-        // Only consider local dirs, not remote locations and abstract protocols
-        if (viewContainer->url().isLocalFile()) {
-            if (!QFileInfo::exists(viewContainer->url().toLocalFile())) {
-                viewContainer->setUrl(QUrl::fromLocalFile(QDir::homePath()));
-            }
-        }
-    }
-}
-
 void DolphinMainWindow::openDirectories(const QList<QUrl>& dirs, bool splitView)
 {
     m_tabWidget->openDirectories(dirs, splitView);
@@ -1049,7 +1033,9 @@ void DolphinMainWindow::openTerminal()
     const QUrl url = m_activeViewContainer->url();
 
     if (url.isLocalFile()) {
-        KToolInvocation::invokeTerminal(QString(), {}, url.toLocalFile());
+        auto job = new KTerminalLauncherJob(QString());
+        job->setWorkingDirectory(url.toLocalFile());
+        job->start();
         return;
     }
 
@@ -1063,14 +1049,18 @@ void DolphinMainWindow::openTerminal()
                 statUrl = job->mostLocalUrl();
             }
 
-            KToolInvocation::invokeTerminal(QString(), {}, statUrl.isLocalFile() ? statUrl.toLocalFile() : QDir::homePath());
+            auto job = new KTerminalLauncherJob(QString());
+            job->setWorkingDirectory(statUrl.isLocalFile() ? statUrl.toLocalFile() : QDir::homePath());
+            job->start();
         });
 
         return;
     }
 
     // Nothing worked, just use $HOME
-    KToolInvocation::invokeTerminal(QString(), {}, QDir::homePath());
+    auto job = new KTerminalLauncherJob(QString());
+    job->setWorkingDirectory(QDir::homePath());
+    job->start();
 }
 
 void DolphinMainWindow::editSettings()
@@ -1543,7 +1533,8 @@ void DolphinMainWindow::setupActions()
     stashSplit->setToolTip(i18nc("@info", "Opens the stash virtual directory in a split window"));
     stashSplit->setIcon(QIcon::fromTheme(QStringLiteral("folder-stash")));
     stashSplit->setCheckable(false);
-    stashSplit->setVisible(QDBusConnection::sessionBus().interface()->isServiceRegistered(QStringLiteral("org.kde.kio.StashNotifier")));
+    QDBusConnectionInterface *sessionInterface = QDBusConnection::sessionBus().interface();
+    stashSplit->setVisible(sessionInterface && sessionInterface->isServiceRegistered(QStringLiteral("org.kde.kio.StashNotifier")));
     connect(stashSplit, &QAction::triggered, this, &DolphinMainWindow::toggleSplitStash);
 
     KStandardAction::redisplay(this, &DolphinMainWindow::reloadView, actionCollection());
@@ -1702,8 +1693,13 @@ void DolphinMainWindow::setupActions()
     m_helpMenu = new KHelpMenu(nullptr);
     m_helpMenu->menu()->installEventFilter(this);
     // remove duplicate shortcuts
-    m_helpMenu->action(KHelpMenu::menuHelpContents)->setShortcut(QKeySequence());
-    m_helpMenu->action(KHelpMenu::menuWhatsThis)->setShortcut(QKeySequence());
+    auto removeHelpActionShortcut = [this](KHelpMenu::MenuId menuId) {
+        if (auto *action = m_helpMenu->action(menuId)) {
+            action->setShortcut(QKeySequence());
+        }
+    };
+    removeHelpActionShortcut(KHelpMenu::menuHelpContents);
+    removeHelpActionShortcut(KHelpMenu::menuWhatsThis);
 
     // not in menu actions
     QList<QKeySequence> nextTabKeys = KStandardShortcut::tabNext();
@@ -2299,6 +2295,18 @@ void DolphinMainWindow::setupWhatsThis()
     // StandardAction separately because both are used in different locations.
     // m_helpMenu is only used for createControlButton() button.
 
+    auto setStandardActionWhatsThis = [this](KStandardAction::StandardAction actionId,
+                                             const QString &whatsThis) {
+        if (auto *action = actionCollection()->action(KStandardAction::name(actionId))) {
+            action->setWhatsThis(whatsThis);
+        }
+    };
+    auto setHelpActionWhatsThis = [this](KHelpMenu::MenuId menuId, const QString &whatsThis) {
+        if (auto *action = m_helpMenu->action(menuId)) {
+            action->setWhatsThis(whatsThis);
+        }
+    };
+
     // Links do not work within the Menubar so texts without links are provided there.
 
     // i18n: If the external link isn't available in your language you should
@@ -2309,13 +2317,12 @@ void DolphinMainWindow::setupWhatsThis()
     const QString whatsThisHelpContents = xi18nc("@info:whatsthis handbook",
         "<para>This opens the Handbook for this application. It provides "
         "explanations for every part of <emphasis>Dolphin</emphasis>.</para>");
-    actionCollection()->action(KStandardAction::name(KStandardAction::HelpContents))
-        ->setWhatsThis(whatsThisHelpContents
+    setStandardActionWhatsThis(KStandardAction::HelpContents, whatsThisHelpContents
         + xi18nc("@info:whatsthis second half of handbook hb text without link",
         "<para>If you want more elaborate introductions to the "
         "different features of <emphasis>Dolphin</emphasis> "
         "go to the KDE UserBase Wiki.</para>"));
-    m_helpMenu->action(KHelpMenu::menuHelpContents)->setWhatsThis(whatsThisHelpContents
+    setHelpActionWhatsThis(KHelpMenu::menuHelpContents, whatsThisHelpContents
         + xi18nc("@info:whatsthis second half of handbook text with link",
         "<para>If you want more elaborate introductions to the "
         "different features of <emphasis>Dolphin</emphasis> "
@@ -2327,8 +2334,7 @@ void DolphinMainWindow::setupWhatsThis()
         "using right now! Click it, then click any component of this "
         "application to ask \"What's this?\" about it. The mouse cursor "
         "will change appearance if no help is available for a spot.</para>");
-    actionCollection()->action(KStandardAction::name(KStandardAction::WhatsThis))
-       ->setWhatsThis(whatsThisWhatsThis
+    setStandardActionWhatsThis(KStandardAction::WhatsThis, whatsThisWhatsThis
         + xi18nc("@info:whatsthis second half of whatsthis button text without link",
         "<para>There are two other ways to get help for this application: The "
         "<interface>Dolphin Handbook</interface> in the <interface>Help"
@@ -2336,7 +2342,7 @@ void DolphinMainWindow::setupWhatsThis()
         "article about <emphasis>File Management</emphasis> online."
         "</para><para>The \"What's this?\" help is "
         "missing in most other windows so don't get too used to this.</para>"));
-    m_helpMenu->action(KHelpMenu::menuWhatsThis)->setWhatsThis(whatsThisWhatsThis
+    setHelpActionWhatsThis(KHelpMenu::menuWhatsThis, whatsThisWhatsThis
         + xi18nc("@info:whatsthis second half of whatsthis button text with link",
         "<para>There are two other ways to get help: "
         "The <link url='help:/dolphin/index.html'>Dolphin Handbook</link> and "
@@ -2347,9 +2353,8 @@ void DolphinMainWindow::setupWhatsThis()
     const QString whatsThisReportBug = xi18nc("@info:whatsthis","<para>This opens a "
         "window that will guide you through reporting errors or flaws "
         "in this application or in other KDE software.</para>");
-    actionCollection()->action(KStandardAction::name(KStandardAction::ReportBug))
-       ->setWhatsThis(whatsThisReportBug);
-    m_helpMenu->action(KHelpMenu::menuReportBug)->setWhatsThis(whatsThisReportBug
+    setStandardActionWhatsThis(KStandardAction::ReportBug, whatsThisReportBug);
+    setHelpActionWhatsThis(KHelpMenu::menuReportBug, whatsThisReportBug
         + xi18nc("@info:whatsthis second half of reportbug text with link",
         "<para>High-quality bug reports are much appreciated. To learn "
         "how to make your bug report as effective as possible "
@@ -2366,33 +2371,30 @@ void DolphinMainWindow::setupWhatsThis()
         "require money like servers, contributor meetings, etc.</para>"
         "<para><emphasis>KDE e.V.</emphasis> is the non-profit "
         "organization behind the KDE community.</para>");
-    actionCollection()->action(KStandardAction::name(KStandardAction::Donate))
-       ->setWhatsThis(whatsThisDonate);
-    m_helpMenu->action(KHelpMenu::menuDonate)->setWhatsThis(whatsThisDonate);
+    setStandardActionWhatsThis(KStandardAction::Donate, whatsThisDonate);
+    setHelpActionWhatsThis(KHelpMenu::menuDonate, whatsThisDonate);
 
     const QString whatsThisSwitchLanguage = xi18nc("@info:whatsthis",
         "With this you can change the language this application uses."
         "<nl/>You can even set secondary languages which will be used "
         "if texts are not available in your preferred language.");
-    actionCollection()->action(KStandardAction::name(KStandardAction::SwitchApplicationLanguage))
-       ->setWhatsThis(whatsThisSwitchLanguage);
-    m_helpMenu->action(KHelpMenu::menuSwitchLanguage)->setWhatsThis(whatsThisSwitchLanguage);
+    setStandardActionWhatsThis(KStandardAction::SwitchApplicationLanguage,
+                               whatsThisSwitchLanguage);
+    setHelpActionWhatsThis(KHelpMenu::menuSwitchLanguage, whatsThisSwitchLanguage);
 
     const QString whatsThisAboutApp = xi18nc("@info:whatsthis","This opens a "
         "window that informs you about the version, license, "
         "used libraries and maintainers of this application.");
-    actionCollection()->action(KStandardAction::name(KStandardAction::AboutApp))
-       ->setWhatsThis(whatsThisAboutApp);
-    m_helpMenu->action(KHelpMenu::menuAboutApp)->setWhatsThis(whatsThisAboutApp);
+    setStandardActionWhatsThis(KStandardAction::AboutApp, whatsThisAboutApp);
+    setHelpActionWhatsThis(KHelpMenu::menuAboutApp, whatsThisAboutApp);
 
     const QString whatsThisAboutKDE = xi18nc("@info:whatsthis","This opens a "
         "window with information about <emphasis>KDE</emphasis>. "
         "The KDE community are the people behind this free software."
         "<nl/>If you like using this application but don't know "
         "about KDE or want to see a cute dragon have a look!");
-    actionCollection()->action(KStandardAction::name(KStandardAction::AboutKDE))
-       ->setWhatsThis(whatsThisAboutKDE);
-    m_helpMenu->action(KHelpMenu::menuAboutKDE)->setWhatsThis(whatsThisAboutKDE);
+    setStandardActionWhatsThis(KStandardAction::AboutKDE, whatsThisAboutKDE);
+    setHelpActionWhatsThis(KHelpMenu::menuAboutKDE, whatsThisAboutKDE);
 }
 
 bool DolphinMainWindow::addHamburgerMenuToToolbar()