diff --git a/komorebi/src/process_event.rs b/komorebi/src/process_event.rs index 83a2a899..d3c74400 100644 --- a/komorebi/src/process_event.rs +++ b/komorebi/src/process_event.rs @@ -65,6 +65,26 @@ impl WindowManager { return Ok(()); } + let should_manage = event.window().should_manage(Some(*event))?; + + // Hide or reposition the window based on whether the target is managed. + if BORDER_ENABLED.load(Ordering::SeqCst) { + if let WindowManagerEvent::FocusChange(_, window) = event { + let border_window = Border::from(BORDER_HWND.load(Ordering::SeqCst)); + if should_manage { + border_window.set_position(*window, true)?; + } else { + border_window.hide()?; + } + } + } + + // All event handlers below this point should only be processed if the event is + // related to a window that should be managed by the WindowManager. + if !should_manage { + return Ok(()); + } + if let Some(virtual_desktop_id) = &self.virtual_desktop_id { if let Some(id) = current_virtual_desktop() { if id != *virtual_desktop_id { diff --git a/komorebi/src/windows_callbacks.rs b/komorebi/src/windows_callbacks.rs index 8bacee9f..c6656058 100644 --- a/komorebi/src/windows_callbacks.rs +++ b/komorebi/src/windows_callbacks.rs @@ -198,13 +198,9 @@ pub extern "system" fn win_event_hook( Some(event) => event, }; - if let Ok(should_manage) = window.should_manage(Option::from(event_type)) { - if should_manage { - winevent_listener::event_tx() - .send(event_type) - .expect("could not send message on winevent_listener::event_tx"); - } - } + winevent_listener::event_tx() + .send(event_type) + .expect("could not send message on winevent_listener::event_tx"); } pub extern "system" fn border_window(