From 5fd7017b7109aa0e6b0140b16cf8f4de3b290760 Mon Sep 17 00:00:00 2001 From: LGUG2Z Date: Wed, 21 Jan 2026 13:36:18 -0800 Subject: [PATCH] fix(wm): prevent dupes when enforcing ws rules This commit ensures that we check if a window is already managed in any workspaces even after checking known_hwnds, because windows moved as part of the earlier ensure_workspace_rules call can slip through the cracks. --- komorebi/src/process_event.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/komorebi/src/process_event.rs b/komorebi/src/process_event.rs index cc58e8d7..9fd7e434 100644 --- a/komorebi/src/process_event.rs +++ b/komorebi/src/process_event.rs @@ -431,6 +431,24 @@ impl WindowManager { proceed = false; } + // after enforce_workspace_rules() has run, check if window exists in ANY workspace + // to prevent duplication when workspace rules move windows across workspaces + if proceed { + let window_already_managed = self + .monitors() + .iter() + .flat_map(|m| m.workspaces()) + .any(|ws| ws.contains_window(window.hwnd)); + + if window_already_managed { + tracing::debug!( + "skipping window addition, already managed after workspace rule enforcement" + ); + + proceed = false; + } + } + if proceed { let behaviour = self.window_management_behaviour( focused_monitor_idx,