From e8e18a48ada1a76c68295ba5b25d63cc899d6a3c Mon Sep 17 00:00:00 2001 From: LGUG2Z Date: Wed, 16 Oct 2024 09:23:31 -0700 Subject: [PATCH] feat(wm): add granular directional monitor idx detection --- komorebi/src/window_manager.rs | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/komorebi/src/window_manager.rs b/komorebi/src/window_manager.rs index b44c0e9a..d5264702 100644 --- a/komorebi/src/window_manager.rs +++ b/komorebi/src/window_manager.rs @@ -468,23 +468,39 @@ impl WindowManager { for (idx, monitor) in self.monitors.elements().iter().enumerate() { match direction { OperationDirection::Left => { - if monitor.size().left + monitor.size().right == current_monitor_size.left { + if monitor.size().right <= current_monitor_size.left + && monitor.size().top < current_monitor_size.bottom + && monitor.size().bottom > current_monitor_size.top + || monitor.size().left + monitor.size().right == current_monitor_size.left + { return Option::from(idx); } } OperationDirection::Right => { - if current_monitor_size.right + current_monitor_size.left == monitor.size().left + if monitor.size().left >= current_monitor_size.right + && monitor.size().top < current_monitor_size.bottom + && monitor.size().bottom > current_monitor_size.top + || current_monitor_size.right + current_monitor_size.left + == monitor.size().left { return Option::from(idx); } } OperationDirection::Up => { - if monitor.size().top + monitor.size().bottom == current_monitor_size.top { + if monitor.size().bottom <= current_monitor_size.top + && monitor.size().left < current_monitor_size.right + && monitor.size().right > current_monitor_size.left + || monitor.size().top + monitor.size().bottom == current_monitor_size.top + { return Option::from(idx); } } OperationDirection::Down => { - if current_monitor_size.top + current_monitor_size.bottom == monitor.size().top + if monitor.size().top >= current_monitor_size.bottom + && monitor.size().left < current_monitor_size.right + && monitor.size().right > current_monitor_size.left + || current_monitor_size.top + current_monitor_size.bottom + == monitor.size().top { return Option::from(idx); }