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.
This commit is contained in:
Marco Allegretti 2026-05-09 10:47:41 +02:00
parent 76da62dae9
commit ebb80d5838
3 changed files with 39 additions and 3 deletions

View file

@ -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);

View file

@ -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;

View file

@ -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()
}
}
}