diff options
| author | Nicolas Fella <[email protected]> | 2023-11-07 15:45:01 +0100 |
|---|---|---|
| committer | Nicolas Fella <[email protected]> | 2023-11-08 13:36:51 +0000 |
| commit | 2cd3d58eec5695899c26ca66a631fb79867b6584 (patch) | |
| tree | 8ea47aeaea6eda7aee91885fe545cd930cd070a9 /src/statusbar | |
| parent | 8297e0a8c97c6e1f6d46b9ecc9c5f495f294d5b8 (diff) | |
Port away from KMoreTools
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)
Diffstat (limited to 'src/statusbar')
| -rw-r--r-- | src/statusbar/statusbarspaceinfo.cpp | 66 |
1 files changed, 59 insertions, 7 deletions
diff --git a/src/statusbar/statusbarspaceinfo.cpp b/src/statusbar/statusbarspaceinfo.cpp index 4eef8497d..546c217a7 100644 --- a/src/statusbar/statusbarspaceinfo.cpp +++ b/src/statusbar/statusbarspaceinfo.cpp @@ -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()); } |
