From 6893f39dd948294555b264f3f25cb5071e54c35b Mon Sep 17 00:00:00 2001 From: alex-ds13 <145657253+alex-ds13@users.noreply.github.com> Date: Thu, 21 Nov 2024 18:47:44 +0000 Subject: [PATCH] fix(wm): focus maximized windows when moving focus across monitors There was an issue where if you changed focus across monitors and the target monitor had a maximized window it would focus one of the containers beneath it instead. And if there were no containers it wouldn't focus anything, but instead keep focus on the previous monitor. This commit fixes that issue. --- komorebi/src/window_manager.rs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/komorebi/src/window_manager.rs b/komorebi/src/window_manager.rs index d4cb0463..1a1ef851 100644 --- a/komorebi/src/window_manager.rs +++ b/komorebi/src/window_manager.rs @@ -1554,7 +1554,7 @@ impl WindowManager { workspace.new_idx_for_direction(direction) }; - let mut cross_monitor_monocle = false; + let mut cross_monitor_monocle_or_max = false; // this is for when we are scrolling across workspaces like PaperWM if new_idx.is_none() @@ -1631,14 +1631,24 @@ impl WindowManager { let mouse_follows_focus = self.mouse_follows_focus; if let Ok(focused_workspace) = self.focused_workspace_mut() { - if let Some(monocle) = focused_workspace.monocle_container() { + if let Some(window) = focused_workspace.maximized_window() { + window.focus(mouse_follows_focus)?; + // (alex-ds13): @LGUG2Z Why was this being done below on the monocle? + // Should it really be done? + // + // WindowsApi::center_cursor_in_rect(&WindowsApi::window_rect( + // window.hwnd, + // )?)?; + + cross_monitor_monocle_or_max = true; + } else if let Some(monocle) = focused_workspace.monocle_container() { if let Some(window) = monocle.focused_window() { window.focus(mouse_follows_focus)?; WindowsApi::center_cursor_in_rect(&WindowsApi::window_rect( window.hwnd, )?)?; - cross_monitor_monocle = true; + cross_monitor_monocle_or_max = true; } } else { match direction { @@ -1675,7 +1685,7 @@ impl WindowManager { } } - if !cross_monitor_monocle { + if !cross_monitor_monocle_or_max { if let Ok(focused_window) = self.focused_window_mut() { focused_window.focus(self.mouse_follows_focus)?; }