]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Port away from KMoreTools
authorNicolas Fella <nicolas.fella@gmx.de>
Tue, 7 Nov 2023 14:45:01 +0000 (15:45 +0100)
committerNicolas Fella <nicolas.fella@gmx.de>
Wed, 8 Nov 2023 13:36:51 +0000 (13:36 +0000)
The idea behind KMoreTools was to point the user at external tools for a given job.

It provides a rather complex framework for that, including suggesting not-yet-installed tools.

The UX behind that isn't great though, which somewhat deep menu hierarchies and a somewhat arbitrary list of tools.

Most KDE apps have moved away from it, with only Dolphin remaining.

Instead provide direct integration with relevant KDE tools (Filelight, KDiskFree, KFind)

.kde-ci.yml
CMakeLists.txt
src/CMakeLists.txt
src/dolphinmainwindow.cpp
src/dolphinpart.cpp
src/search/dolphinsearchbox.cpp
src/search/dolphinsearchbox.h
src/statusbar/statusbarspaceinfo.cpp

index 28fcaac569b390d20bed36574ddc372f6bc9b2ae..500b80c569f80fec59d52c704619909ca770b150 100644 (file)
@@ -28,7 +28,6 @@ Dependencies:
     'frameworks/kuserfeedback': '@latest-kf6'
     'plasma/kactivities': '@latest-kf6'
     'libraries/phonon': '@latest-kf6'
-    'libraries/kmoretools': '@latest-kf6'
 
 - 'on': ['Linux/Qt6', 'FreeBSD/Qt6']
   'require':
index d9e574f2cb25212c5c9aa5f90ea5e69cbbe15e0a..a14d6895b70cbaa4e622bf93b2e21b6f1f779ec5 100644 (file)
@@ -75,7 +75,6 @@ find_package(KF6 ${KF6_MIN_VERSION} REQUIRED COMPONENTS
     WindowSystem
     WidgetsAddons
     Codecs
-    MoreTools
 )
 
 find_package(KUserFeedbackQt6 1.2.1)
index 0792af0c0bece0055e81e22b74fda8f9183612ad..8eb5a0e9f071ede5b71263b76bdfb0165b9480aa 100644 (file)
@@ -212,8 +212,6 @@ target_link_libraries(
     KF6::Codecs
     KF6::KCMUtils
 
-    KF6::MoreTools
-
     ${FTS_LIB}
 )
 
index 0d31df2da08bacff1ffdcb61758020d6a8c182f8..635121062a58ac47f7102904a6a63f96f55ab484 100644 (file)
@@ -48,7 +48,6 @@
 #include <KJobWidgets>
 #include <KLocalizedString>
 #include <KMessageBox>
-#include <KMoreToolsMenuFactory>
 #include <KProtocolInfo>
 #include <KProtocolManager>
 #include <KShell>
@@ -1127,15 +1126,20 @@ void DolphinMainWindow::toggleShowMenuBar()
 QPointer<QAction> DolphinMainWindow::preferredSearchTool()
 {
     m_searchTools.clear();
-    KMoreToolsMenuFactory("dolphin/search-tools").fillMenuFromGroupingNames(&m_searchTools, {"files-find"}, m_activeViewContainer->url());
-    QList<QAction *> actions = m_searchTools.actions();
-    if (actions.isEmpty()) {
-        return nullptr;
-    }
-    QAction *action = actions.first();
-    if (action->isSeparator()) {
+
+    KService::Ptr kfind = KService::serviceByDesktopName(QStringLiteral("org.kde.kfind"));
+
+    if (!kfind) {
         return nullptr;
     }
+
+    auto *action = new QAction(QIcon::fromTheme(kfind->icon()), kfind->name(), this);
+
+    connect(action, &QAction::triggered, this, [kfind] {
+        auto *job = new KIO::ApplicationLauncherJob(kfind);
+        job->start();
+    });
+
     return action;
 }
 
index 4ba1f074202797df724f1c0b3cfeb85a2841747c..bb27e0a5e4650047dd61240f2fee5beca25904b2 100644 (file)
@@ -28,7 +28,6 @@
 #include <KLocalizedString>
 #include <KMessageBox>
 #include <KMimeTypeEditor>
-#include <KMoreToolsMenuFactory>
 #include <KPluginFactory>
 #include <KPluginMetaData>
 #include <KSharedConfig>
@@ -527,17 +526,10 @@ void DolphinPart::slotOpenTerminal()
 
 void DolphinPart::slotFindFile()
 {
-    QMenu searchTools;
-    KMoreToolsMenuFactory("dolphin/search-tools").fillMenuFromGroupingNames(&searchTools, {"files-find"}, QUrl::fromLocalFile(localFilePathOrHome()));
-    QList<QAction *> actions = searchTools.actions();
-    if (!(actions.isEmpty())) {
-        actions.first()->trigger();
-    } else {
-        KIO::CommandLauncherJob *job = new KIO::CommandLauncherJob(QStringLiteral("kfind"), {url().toString()}, this);
-        job->setDesktopName(QStringLiteral("org.kde.kfind"));
-        job->setUiDelegate(new KDialogJobUiDelegate(KJobUiDelegate::AutoHandlingEnabled, widget()));
-        job->start();
-    }
+    KIO::CommandLauncherJob *job = new KIO::CommandLauncherJob(QStringLiteral("kfind"), {url().toString()}, this);
+    job->setDesktopName(QStringLiteral("org.kde.kfind"));
+    job->setUiDelegate(new KDialogJobUiDelegate(KJobUiDelegate::AutoHandlingEnabled, widget()));
+    job->start();
 }
 
 void DolphinPart::updateNewMenu()
index a3cec6fe7e1ea4ea55e51d34a11943cab2d2a38e..dfd733e5da2093eb5d496a91a0135275fb8d6a43 100644 (file)
 #include "dolphinquery.h"
 
 #include "config-dolphin.h"
+#include <KIO/ApplicationLauncherJob>
 #include <KLocalizedString>
-#include <KMoreToolsMenuFactory>
 #include <KSeparator>
+#include <KService>
 #if HAVE_BALOO
 #include <Baloo/IndexerConfig>
 #include <Baloo/Query>
@@ -395,18 +396,24 @@ void DolphinSearchBox::init()
     searchLocationGroup->addButton(m_fromHereButton);
     searchLocationGroup->addButton(m_everywhereButton);
 
-    auto moreSearchToolsButton = new QToolButton(this);
-    moreSearchToolsButton->setAutoRaise(true);
-    moreSearchToolsButton->setPopupMode(QToolButton::InstantPopup);
-    moreSearchToolsButton->setIcon(QIcon::fromTheme("arrow-down-double"));
-    moreSearchToolsButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
-    moreSearchToolsButton->setText(i18n("More Search Tools"));
-    moreSearchToolsButton->setMenu(new QMenu(this));
-    connect(moreSearchToolsButton->menu(), &QMenu::aboutToShow, moreSearchToolsButton->menu(), [this, moreSearchToolsButton]() {
-        m_menuFactory.reset(new KMoreToolsMenuFactory("dolphin/search-tools"));
-        moreSearchToolsButton->menu()->clear();
-        m_menuFactory->fillMenuFromGroupingNames(moreSearchToolsButton->menu(), {"files-find"}, this->m_searchPath);
-    });
+    KService::Ptr kfind = KService::serviceByDesktopName(QStringLiteral("org.kde.kfind"));
+
+    QToolButton *kfindToolsButton = nullptr;
+    if (kfind) {
+        kfindToolsButton = new QToolButton(this);
+        kfindToolsButton->setAutoRaise(true);
+        kfindToolsButton->setPopupMode(QToolButton::InstantPopup);
+        kfindToolsButton->setIcon(QIcon::fromTheme("arrow-down-double"));
+        kfindToolsButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+        kfindToolsButton->setText(i18n("Open %1", kfind->name()));
+        kfindToolsButton->setIcon(QIcon::fromTheme(kfind->icon()));
+
+        connect(kfindToolsButton, &QToolButton::clicked, this, [this, kfind] {
+            auto *job = new KIO::ApplicationLauncherJob(kfind);
+            job->setUrls({m_searchPath});
+            job->start();
+        });
+    }
 
     // Create "Facets" widget
     m_facetsWidget = new DolphinFacetsWidget(this);
@@ -429,7 +436,9 @@ void DolphinSearchBox::init()
     optionsLayout->addWidget(m_fromHereButton);
     optionsLayout->addWidget(m_everywhereButton);
     optionsLayout->addWidget(new KSeparator(Qt::Vertical, this));
-    optionsLayout->addWidget(moreSearchToolsButton);
+    if (kfindToolsButton) {
+        optionsLayout->addWidget(kfindToolsButton);
+    }
     optionsLayout->addStretch(1);
 
     m_optionsScrollArea = new QScrollArea(this);
index b73c2899ff9f1bdced71c4abaa1a8c4b164cce67..9f1ad29525d7de7390a9a09bae881189651cb192 100644 (file)
@@ -18,7 +18,6 @@ class QToolButton;
 class QScrollArea;
 class QLabel;
 class QVBoxLayout;
-class KMoreToolsMenuFactory;
 
 /**
  * @brief Input box for searching files with or without Baloo.
@@ -172,7 +171,6 @@ private:
     DolphinFacetsWidget *m_facetsWidget;
 
     QUrl m_searchPath;
-    QScopedPointer<KMoreToolsMenuFactory> m_menuFactory;
 
     QTimer *m_startSearchTimer;
 };
index 4eef8497df8c7c70e273f06e83155b03b6d937d4..546c217a7ad3ff62b54547acf0afb9ee5413f3e8 100644 (file)
@@ -8,11 +8,14 @@
 
 #include "spaceinfoobserver.h"
 
+#include <KIO/ApplicationLauncherJob>
+#include <KIO/Global>
 #include <KLocalizedString>
-#include <KMoreToolsMenuFactory>
+#include <KService>
 
-#include <KIO/Global>
+#include <QMenu>
 #include <QMouseEvent>
+#include <QStorageInfo>
 
 StatusBarSpaceInfo::StatusBarSpaceInfo(QWidget *parent)
     : KCapacityBar(KCapacityBar::DrawTextInline, parent)
@@ -87,11 +90,60 @@ void StatusBarSpaceInfo::mousePressEvent(QMouseEvent *event)
         // Creates a menu with tools that help to find out more about free
         // disk space for the given url.
 
-        // Note that this object must live long enough in case the user opens
-        // the "Configure..." dialog
-        KMoreToolsMenuFactory menuFactory(QStringLiteral("dolphin/statusbar-diskspace-menu"));
-        menuFactory.setParentWidget(this);
-        auto menu = menuFactory.createMenuFromGroupingNames({"disk-usage", "more:", "disk-partitions"}, m_url);
+        const KService::Ptr filelight = KService::serviceByDesktopName(QStringLiteral("org.kde.filelight"));
+        const KService::Ptr kdiskfree = KService::serviceByDesktopName(QStringLiteral("org.kde.kdf"));
+
+        if (!filelight && !kdiskfree) {
+            // nothing to show
+            return;
+        }
+
+        QMenu *menu = new QMenu(this);
+
+        if (filelight) {
+            QAction *filelightFolderAction = menu->addAction(QIcon::fromTheme(QStringLiteral("filelight")), i18n("Disk Usage Statistics - current folder"));
+
+            menu->connect(filelightFolderAction, &QAction::triggered, menu, [this, filelight](bool) {
+                auto *job = new KIO::ApplicationLauncherJob(filelight);
+                job->setUrls({m_url});
+                job->start();
+            });
+
+            // For remote URLs like FTP analyzing the device makes no sense
+            if (m_url.isLocalFile()) {
+                QAction *filelightDiskAction = menu->addAction(QIcon::fromTheme(QStringLiteral("filelight")), i18n("Disk Usage Statistics - current device"));
+
+                menu->connect(filelightDiskAction, &QAction::triggered, menu, [this, filelight](bool) {
+                    const QStorageInfo info(m_url.toLocalFile());
+
+                    if (info.isValid() && info.isReady()) {
+                        auto *job = new KIO::ApplicationLauncherJob(filelight);
+                        job->setUrls({QUrl::fromLocalFile(info.rootPath())});
+                        job->start();
+                    }
+                });
+            }
+
+            QAction *filelightAllAction = menu->addAction(QIcon::fromTheme(QStringLiteral("filelight")), i18n("Disk Usage Statistics - all devices"));
+
+            menu->connect(filelightAllAction, &QAction::triggered, menu, [this, filelight](bool) {
+                const QStorageInfo info(m_url.toLocalFile());
+
+                if (info.isValid() && info.isReady()) {
+                    auto *job = new KIO::ApplicationLauncherJob(filelight);
+                    job->start();
+                }
+            });
+        }
+
+        if (kdiskfree) {
+            QAction *kdiskfreeAction = menu->addAction(QIcon::fromTheme(QStringLiteral("kdf")), i18n("KDiskFree"));
+
+            connect(kdiskfreeAction, &QAction::triggered, this, [kdiskfree] {
+                auto *job = new KIO::ApplicationLauncherJob(kdiskfree);
+                job->start();
+            });
+        }
 
         menu->exec(QCursor::pos());
     }