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); 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 void HomeScreen::activateVirtualDesktop(const QVariant &desktop) const
{ {
if (!desktop.isValid() || desktop.toString().isEmpty()) { if (!desktop.isValid() || desktop.toString().isEmpty()) {
@ -111,7 +118,7 @@ void HomeScreen::activateVirtualDesktop(const QVariant &desktop) const
void HomeScreen::emptyTrash() const void HomeScreen::emptyTrash() const
{ {
QDBusMessage message = QDBusMessage::createMethodCall(QStringLiteral("org.kde.kio.trash"), QDBusMessage message = QDBusMessage::createMethodCall(QStringLiteral("org.kde.kio.trash"),
QStringLiteral("/trash"), acceptedButtons : Qt.LeftButton | Qt.RightButton QStringLiteral("/trash"),
QStringLiteral("org.kde.KIO.Trash"), QStringLiteral("org.kde.KIO.Trash"),
QStringLiteral("emptyTrash")); QStringLiteral("emptyTrash"));
QDBusConnection::sessionBus().send(message); QDBusConnection::sessionBus().send(message);

View file

@ -51,6 +51,7 @@ public:
void configChanged() override; void configChanged() override;
Q_INVOKABLE void triggerOverview() const; Q_INVOKABLE void triggerOverview() const;
Q_INVOKABLE void triggerMinimizeAll() const;
Q_INVOKABLE void activateVirtualDesktop(const QVariant &desktop) const; Q_INVOKABLE void activateVirtualDesktop(const QVariant &desktop) const;
Q_INVOKABLE void emptyTrash() const; Q_INVOKABLE void emptyTrash() const;

View file

@ -336,7 +336,7 @@ MouseArea {
} }
PC3.ToolTip { PC3.ToolTip {
visible: desktopMouseArea.containsMouse visible: desktopMouseArea.containsMouse && !desktopContextMenu.opened
text: desktopButton.Accessible.name text: desktopButton.Accessible.name
} }
@ -344,8 +344,36 @@ MouseArea {
id: desktopMouseArea id: desktopMouseArea
anchors.fill: parent anchors.fill: parent
hoverEnabled: true hoverEnabled: true
acceptedButtons: Qt.LeftButton | Qt.RightButton
cursorShape: root.convergenceMode ? Qt.PointingHandCursor : Qt.ArrowCursor 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()
}
} }
} }