From f83d6c7778b0798faaca85c27d4747fcdf0cb380 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=E1=BB=B3nh=20Thi=E1=BB=87n=20L=E1=BB=99c?= Date: Thu, 13 Aug 2026 10:28:40 +0700 Subject: [PATCH] fix(dock): cycle niri overview groups (#3038) --- quickshell/Modules/Dock/DockAppButton.qml | 9 +++++++++ quickshell/Services/NiriService.qml | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/quickshell/Modules/Dock/DockAppButton.qml b/quickshell/Modules/Dock/DockAppButton.qml index 38be6ceea..45f73494f 100644 --- a/quickshell/Modules/Dock/DockAppButton.qml +++ b/quickshell/Modules/Dock/DockAppButton.qml @@ -199,6 +199,15 @@ Item { } } + if (currentIndex < 0 && CompositorService.isNiri && NiriService.inOverview && NiriService.lastFocusedWindowId !== null) { + for (let i = 0; i < toplevels.length; i++) { + if (toplevels[i].niriWindowId === NiriService.lastFocusedWindowId) { + currentIndex = i; + break; + } + } + } + const nextToplevel = toplevels[(currentIndex + 1) % toplevels.length]; if (restoreSpecialWorkspaceWindow(nextToplevel)) return; diff --git a/quickshell/Services/NiriService.qml b/quickshell/Services/NiriService.qml index 13a04da30..b3483cfee 100644 --- a/quickshell/Services/NiriService.qml +++ b/quickshell/Services/NiriService.qml @@ -24,6 +24,7 @@ Singleton { property var outputs: ({}) property var windows: [] property var displayScales: ({}) + property var lastFocusedWindowId: null property var _realOutputs: ({}) @@ -483,6 +484,8 @@ Singleton { function handleWindowFocusChanged(data) { const focusedWindowId = data.id; + if (focusedWindowId !== null && focusedWindowId !== undefined) + lastFocusedWindowId = focusedWindowId; // Only clone windows whose focus flag changes; skip reassignment if nothing changed. let focusedWindow = null; @@ -536,6 +539,8 @@ Singleton { updatedWs[prop] = ws[prop]; } updatedWs.active_window_id = data.active_window_id; + if (data.active_window_id !== null && data.active_window_id !== undefined) + lastFocusedWindowId = data.active_window_id; const updatedWorkspaces = {}; for (const id in root.workspaces) {