From ebb80d5838f2f36ab91dffd5eecb9dea4c6fe826 Mon Sep 17 00:00:00 2001 From: Marco Allegretti Date: Sat, 9 May 2026 10:47:41 +0200 Subject: [PATCH] Add desktop actions to the dock button Open the desktop button context menu on right click or press and hold, and expose Minimize All Windows through KWin's existing global shortcut. --- containments/homescreens/folio/homescreen.cpp | 9 +++++- containments/homescreens/folio/homescreen.h | 1 + .../homescreens/folio/qml/FavouritesBar.qml | 32 +++++++++++++++++-- 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/containments/homescreens/folio/homescreen.cpp b/containments/homescreens/folio/homescreen.cpp index 3d9e4fef..ca81b8e7 100644 --- a/containments/homescreens/folio/homescreen.cpp +++ b/containments/homescreens/folio/homescreen.cpp @@ -98,6 +98,13 @@ void HomeScreen::triggerOverview() const QDBusConnection::sessionBus().send(message); } +void HomeScreen::triggerMinimizeAll() const +{ + QDBusMessage message = QDBusMessage::createMethodCall("org.kde.kglobalaccel", "/component/kwin", "org.kde.kglobalaccel.Component", "invokeShortcut"); + message.setArguments({QStringLiteral("MinimizeAll")}); + QDBusConnection::sessionBus().send(message); +} + void HomeScreen::activateVirtualDesktop(const QVariant &desktop) const { if (!desktop.isValid() || desktop.toString().isEmpty()) { @@ -111,7 +118,7 @@ void HomeScreen::activateVirtualDesktop(const QVariant &desktop) const void HomeScreen::emptyTrash() const { QDBusMessage message = QDBusMessage::createMethodCall(QStringLiteral("org.kde.kio.trash"), - QStringLiteral("/trash"), + acceptedButtons : Qt.LeftButton | Qt.RightButton QStringLiteral("/trash"), QStringLiteral("org.kde.KIO.Trash"), QStringLiteral("emptyTrash")); QDBusConnection::sessionBus().send(message); diff --git a/containments/homescreens/folio/homescreen.h b/containments/homescreens/folio/homescreen.h index 70dc5f7c..b0ae853a 100644 --- a/containments/homescreens/folio/homescreen.h +++ b/containments/homescreens/folio/homescreen.h @@ -51,6 +51,7 @@ public: void configChanged() override; Q_INVOKABLE void triggerOverview() const; + Q_INVOKABLE void triggerMinimizeAll() const; Q_INVOKABLE void activateVirtualDesktop(const QVariant &desktop) const; Q_INVOKABLE void emptyTrash() const; diff --git a/containments/homescreens/folio/qml/FavouritesBar.qml b/containments/homescreens/folio/qml/FavouritesBar.qml index 1601ad60..3329a1a7 100644 --- a/containments/homescreens/folio/qml/FavouritesBar.qml +++ b/containments/homescreens/folio/qml/FavouritesBar.qml @@ -336,7 +336,7 @@ MouseArea { } PC3.ToolTip { - visible: desktopMouseArea.containsMouse + visible: desktopMouseArea.containsMouse && !desktopContextMenu.opened text: desktopButton.Accessible.name } @@ -344,8 +344,36 @@ MouseArea { id: desktopMouseArea anchors.fill: parent hoverEnabled: true + acceptedButtons: Qt.LeftButton | Qt.RightButton cursorShape: root.convergenceMode ? Qt.PointingHandCursor : Qt.ArrowCursor - onClicked: desktopButton.toggleDesktop() + onClicked: (mouse) => { + if (mouse.button === Qt.RightButton) { + desktopContextMenu.open() + } else { + desktopButton.toggleDesktop() + } + } + onPressAndHold: { + desktopContextMenu.open() + haptics.buttonVibrate() + } + } + + PC3.Menu { + id: desktopContextMenu + popupType: T.Popup.Window + + PC3.MenuItem { + icon.name: "user-desktop" + text: desktopButton.Accessible.name + onTriggered: desktopButton.toggleDesktop() + } + PC3.MenuItem { + icon.name: "window-minimize-symbolic" + text: i18n("Minimize All Windows") + enabled: !WindowPlugin.WindowUtil.isShowingDesktop + onTriggered: root.folio.triggerMinimizeAll() + } } }