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.
This commit is contained in:
alex-ds13
2024-11-21 18:47:44 +00:00
committed by جاد
parent 041ef5731c
commit 6893f39dd9

View File

@@ -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)?;
}