From 80bad610ceb05420e6bb02723a33b14782ddda90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=E1=BB=B3nh=20Thi=E1=BB=87n=20L=E1=BB=99c?= Date: Sun, 9 Aug 2026 05:46:48 +0700 Subject: [PATCH] feat(dock): cycle grouped app windows (#3023) --- quickshell/Modules/Dock/DockAppButton.qml | 24 ++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/quickshell/Modules/Dock/DockAppButton.qml b/quickshell/Modules/Dock/DockAppButton.qml index c74a84bda..a5d260412 100644 --- a/quickshell/Modules/Dock/DockAppButton.qml +++ b/quickshell/Modules/Dock/DockAppButton.qml @@ -168,6 +168,25 @@ Item { Qt.callLater(() => waylandToplevel.activate()); return true; } + + function cycleGroupedToplevels() { + const toplevels = getGroupedToplevels(); + if (toplevels.length === 0) + return; + + let currentIndex = -1; + for (let i = 0; i < toplevels.length; i++) { + if (toplevels[i].activated) { + currentIndex = i; + break; + } + } + + const nextToplevel = toplevels[(currentIndex + 1) % toplevels.length]; + if (restoreSpecialWorkspaceWindow(nextToplevel)) + return; + nextToplevel.activate(); + } onIsHoveredChanged: { if (mouseArea.pressed || dragging) return; @@ -343,9 +362,8 @@ Item { return; groupedToplevel.activate(); } - } else if (contextMenu) { - const shouldHidePin = appData.appId === "org.quickshell" || appData.appId === "com.danklinux.dms"; - contextMenu.showForButton(root, appData, root.height + 25, shouldHidePin, cachedDesktopEntry, parentDockScreen, dockApps); + } else { + cycleGroupedToplevels(); } break; }