diff --git a/komorebi/src/process_event.rs b/komorebi/src/process_event.rs index 94701736..0cd9dd12 100644 --- a/komorebi/src/process_event.rs +++ b/komorebi/src/process_event.rs @@ -334,8 +334,10 @@ impl WindowManager { if proceed { let behaviour = self.window_container_behaviour; let workspace = self.focused_workspace_mut()?; + let workspace_contains_window = workspace.contains_window(window.hwnd); + let monocle_container = workspace.monocle_container().clone(); - if !workspace.contains_window(window.hwnd) && !needs_reconciliation { + if !workspace_contains_window && !needs_reconciliation { match behaviour { WindowContainerBehaviour::Create => { workspace.new_container_for_window(window); @@ -350,6 +352,21 @@ impl WindowManager { } } } + + if workspace_contains_window { + let mut monocle_window_event = false; + if let Some(ref monocle) = monocle_container { + if let Some(monocle_window) = monocle.focused_window() { + if monocle_window.hwnd == window.hwnd { + monocle_window_event = true; + } + } + } + + if !monocle_window_event && monocle_container.is_some() { + window.hide(); + } + } } } WindowManagerEvent::MoveResizeStart(_, window) => { diff --git a/komorebi/src/window_manager.rs b/komorebi/src/window_manager.rs index 1b6b8caf..4dbd92c3 100644 --- a/komorebi/src/window_manager.rs +++ b/komorebi/src/window_manager.rs @@ -1129,7 +1129,11 @@ impl WindowManager { tracing::info!("focusing container"); - let new_idx = workspace.new_idx_for_direction(direction); + let new_idx = if workspace.monocle_container().is_some() { + None + } else { + workspace.new_idx_for_direction(direction) + }; let mut cross_monitor_monocle = false;