From 2618d8f529534ea95a6fc4c365e495219e8fa351 Mon Sep 17 00:00:00 2001 From: LGUG2Z Date: Thu, 11 Aug 2022 06:51:34 -0700 Subject: [PATCH] fix(wm): skip border update when ws tiling disabled This commit ensures that active window border updates in the event processing loop are skipped if the current workspace has tiling disabled. Previously this check was not enforced so the border would reappear on a workspace that had disabled tiling after new events had been processed. --- komorebi/src/process_event.rs | 47 +++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/komorebi/src/process_event.rs b/komorebi/src/process_event.rs index e5470bed..65385ce5 100644 --- a/komorebi/src/process_event.rs +++ b/komorebi/src/process_event.rs @@ -475,31 +475,34 @@ impl WindowManager { WindowManagerEvent::MonitorPoll(..) | WindowManagerEvent::MouseCapture(..) => {} }; - match event { - WindowManagerEvent::MoveResizeStart(_, _) => { - let border = Border::from(BORDER_HWND.load(Ordering::SeqCst)); - border.hide()?; - BORDER_HIDDEN.store(true, Ordering::SeqCst); - } - WindowManagerEvent::MoveResizeEnd(_, _) - | WindowManagerEvent::Show(_, _) - | WindowManagerEvent::FocusChange(_, _) => { - let window = self.focused_window()?; - let mut rect = WindowsApi::window_rect(window.hwnd())?; - rect.top -= self.invisible_borders.bottom; - rect.bottom += self.invisible_borders.bottom; - - let activate = BORDER_HIDDEN.load(Ordering::SeqCst); - - let border = Border::from(BORDER_HWND.load(Ordering::SeqCst)); - border.set_position(*window, &self.invisible_borders, activate)?; - - if activate { - BORDER_HIDDEN.store(false, Ordering::SeqCst); + if *self.focused_workspace()?.tile() { + match event { + WindowManagerEvent::MoveResizeStart(_, _) => { + let border = Border::from(BORDER_HWND.load(Ordering::SeqCst)); + border.hide()?; + BORDER_HIDDEN.store(true, Ordering::SeqCst); } + WindowManagerEvent::MoveResizeEnd(_, _) + | WindowManagerEvent::Show(_, _) + | WindowManagerEvent::FocusChange(_, _) => { + let window = self.focused_window()?; + let mut rect = WindowsApi::window_rect(window.hwnd())?; + rect.top -= self.invisible_borders.bottom; + rect.bottom += self.invisible_borders.bottom; + + let activate = BORDER_HIDDEN.load(Ordering::SeqCst); + + let border = Border::from(BORDER_HWND.load(Ordering::SeqCst)); + border.set_position(*window, &self.invisible_borders, activate)?; + + if activate { + BORDER_HIDDEN.store(false, Ordering::SeqCst); + } + } + _ => {} } - _ => {} } + // If we unmanaged a window, it shouldn't be immediately hidden behind managed windows if let WindowManagerEvent::Unmanage(window) = event { window.center(&self.focused_monitor_work_area()?, &invisible_borders)?;