From 60e1834b43251496f1c52015537bd1b18461d32d Mon Sep 17 00:00:00 2001 From: alex-ds13 <145657253+alex-ds13@users.noreply.github.com> Date: Wed, 12 Mar 2025 00:04:48 +0000 Subject: [PATCH] fix(wm): correct float window move/resize This commit fixes an issue where the move/resize functions for floating windows weren't properly taking into account the coordinates of secondary monitors and were only working correctly on the main monitor where top/left was 0/0. --- komorebi/src/window_manager.rs | 46 ++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/komorebi/src/window_manager.rs b/komorebi/src/window_manager.rs index d78c47f3..de5392e7 100644 --- a/komorebi/src/window_manager.rs +++ b/komorebi/src/window_manager.rs @@ -1415,10 +1415,10 @@ impl WindowManager { focused_monitor_work_area.left += border_width; focused_monitor_work_area.top += border_offset; focused_monitor_work_area.top += border_width; - focused_monitor_work_area.right -= border_offset; - focused_monitor_work_area.right -= border_width; - focused_monitor_work_area.bottom -= border_offset; - focused_monitor_work_area.bottom -= border_width; + focused_monitor_work_area.right -= border_offset * 2; + focused_monitor_work_area.right -= border_width * 2; + focused_monitor_work_area.bottom -= border_offset * 2; + focused_monitor_work_area.bottom -= border_width * 2; for window in workspace.floating_windows().iter() { if window.hwnd == focused_hwnd { @@ -1436,9 +1436,12 @@ impl WindowManager { } (OperationDirection::Right, Sizing::Increase) => { if rect.left + rect.right + delta * 2 - > focused_monitor_work_area.right + > focused_monitor_work_area.left + + focused_monitor_work_area.right { - rect.right = focused_monitor_work_area.right - rect.left; + rect.right = focused_monitor_work_area.left + + focused_monitor_work_area.right + - rect.left; } else { rect.right += delta * 2; } @@ -1458,9 +1461,12 @@ impl WindowManager { } (OperationDirection::Down, Sizing::Increase) => { if rect.top + rect.bottom + delta * 2 - > focused_monitor_work_area.bottom + > focused_monitor_work_area.top + + focused_monitor_work_area.bottom { - rect.bottom = focused_monitor_work_area.bottom - rect.top; + rect.bottom = focused_monitor_work_area.top + + focused_monitor_work_area.bottom + - rect.top; } else { rect.bottom += delta * 2; } @@ -2175,10 +2181,10 @@ impl WindowManager { focused_monitor_work_area.left += border_width; focused_monitor_work_area.top += border_offset; focused_monitor_work_area.top += border_width; - focused_monitor_work_area.right -= border_offset; - focused_monitor_work_area.right -= border_width; - focused_monitor_work_area.bottom -= border_offset; - focused_monitor_work_area.bottom -= border_width; + focused_monitor_work_area.right -= border_offset * 2; + focused_monitor_work_area.right -= border_width * 2; + focused_monitor_work_area.bottom -= border_offset * 2; + focused_monitor_work_area.bottom -= border_width * 2; let focused_workspace = self.focused_workspace()?; let delta = self.resize_delta; @@ -2196,8 +2202,12 @@ impl WindowManager { } } OperationDirection::Right => { - if rect.left + delta + rect.right > focused_monitor_work_area.right { - rect.left = focused_monitor_work_area.right - rect.right; + if rect.left + delta + rect.right + > focused_monitor_work_area.left + focused_monitor_work_area.right + { + rect.left = focused_monitor_work_area.left + + focused_monitor_work_area.right + - rect.right; } else { rect.left += delta; } @@ -2210,8 +2220,12 @@ impl WindowManager { } } OperationDirection::Down => { - if rect.top + delta + rect.bottom > focused_monitor_work_area.bottom { - rect.top = focused_monitor_work_area.bottom - rect.bottom; + if rect.top + delta + rect.bottom + > focused_monitor_work_area.top + focused_monitor_work_area.bottom + { + rect.top = focused_monitor_work_area.top + + focused_monitor_work_area.bottom + - rect.bottom; } else { rect.top += delta; }