From d8fa3f609d55769e1af2a8743281bce111b8e01b 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, 4 Oct 2026 22:08:18 +0700 Subject: [PATCH] fix(dock): preserve focused indicator in overview mode (#3680) --- quickshell/Modules/Dock/DockAppButton.qml | 24 +++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/quickshell/Modules/Dock/DockAppButton.qml b/quickshell/Modules/Dock/DockAppButton.qml index 5a682a983..825244adc 100644 --- a/quickshell/Modules/Dock/DockAppButton.qml +++ b/quickshell/Modules/Dock/DockAppButton.qml @@ -68,13 +68,10 @@ Item { if (appData.type === "window") { const toplevel = getToplevelObject(); - if (!toplevel) { - return false; - } - return toplevel.activated; + return isToplevelFocused(toplevel); } if (appData.type === "grouped") - return getGroupedToplevels().some(toplevel => toplevel.activated); + return getGroupedToplevels().some(toplevel => isToplevelFocused(toplevel)); return false; } @@ -123,6 +120,14 @@ Item { return appData?.allWindows?.map(w => w.toplevel).filter(t => t !== null) || []; } + function isToplevelFocused(toplevel) { + if (!toplevel) + return false; + if (toplevel.activated) + return true; + return CompositorService.overviewFocusedToplevel([toplevel]) !== null; + } + function restoreSpecialWorkspaceWindow(waylandToplevel) { if (!root.options.restoreSpecialWorkspaceOnClick || !waylandToplevel) return false; @@ -138,12 +143,11 @@ Item { function getActiveGroupedToplevelIndex(toplevels) { for (let i = 0; i < toplevels.length; i++) { - if (toplevels[i].activated) + if (isToplevelFocused(toplevels[i])) return i; } - const overviewFocused = CompositorService.overviewFocusedToplevel(toplevels); - return overviewFocused ? toplevels.indexOf(overviewFocused) : -1; + return -1; } function cycleGroupedToplevels() { @@ -584,7 +588,7 @@ Item { if (appData.type !== "grouped" || appData.windowCount === 1) return isWindowFocused; const groupToplevels = getGroupedToplevels(); - return index < groupToplevels.length && groupToplevels[index].activated; + return index < groupToplevels.length && isToplevelFocused(groupToplevels[index]); } readonly property real baseWidth: { if (root.options.indicatorStyle === "circle") @@ -641,7 +645,7 @@ Item { if (appData.type !== "grouped" || appData.windowCount === 1) return isWindowFocused; const groupToplevels = getGroupedToplevels(); - return index < groupToplevels.length && groupToplevels[index].activated; + return index < groupToplevels.length && isToplevelFocused(groupToplevels[index]); } readonly property real baseHeight: { if (root.options.indicatorStyle === "circle")