From df9ae931cc81236b4a7a0d2a2bd95e81ba07fd7e Mon Sep 17 00:00:00 2001 From: alex-ds13 <145657253+alex-ds13@users.noreply.github.com> Date: Mon, 17 Mar 2025 18:15:58 +0000 Subject: [PATCH] feat(wm): toggle float override with floating layer This commit ensures that when the user switches to the flooating layer any new spawned window will be spawned floating as if the float override was set. This results in a workflow which makes it easier to spawn floating windows on the fly. This effectively reverts commit ff2aa5e51a041043d90a403126e9ff8ad8ecdec4. --- komorebi/src/window_manager.rs | 7 ++++++- komorebi/src/workspace.rs | 15 +-------------- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/komorebi/src/window_manager.rs b/komorebi/src/window_manager.rs index 2531f85e..fa5d2a17 100644 --- a/komorebi/src/window_manager.rs +++ b/komorebi/src/window_manager.rs @@ -634,12 +634,17 @@ impl WindowManager { self.window_management_behaviour.current_behaviour }; - let float_override = if let Some(float_override) = workspace.float_override() { + let mut float_override = if let Some(float_override) = workspace.float_override() { *float_override } else { self.window_management_behaviour.float_override }; + // If the workspace layer is `Floating`, then consider it as if it had float + // override so that new windows spawn as floating + float_override = + float_override || matches!(workspace.layer, WorkspaceLayer::Floating); + return WindowManagementBehaviour { current_behaviour, float_override, diff --git a/komorebi/src/workspace.rs b/komorebi/src/workspace.rs index f9d6f825..68e7cca5 100644 --- a/komorebi/src/workspace.rs +++ b/komorebi/src/workspace.rs @@ -88,7 +88,7 @@ pub struct Workspace { pub float_override: Option, #[getset(get = "pub", get_mut = "pub", set = "pub")] pub globals: WorkspaceGlobals, - #[getset(get = "pub", get_mut = "pub")] + #[getset(get = "pub", get_mut = "pub", set = "pub")] pub layer: WorkspaceLayer, #[serde(skip_serializing_if = "Option::is_none")] #[getset(get = "pub", set = "pub")] @@ -593,19 +593,6 @@ impl Workspace { Ok((hwnds.len() + floating_hwnds.len(), container_ids.len())) } - pub fn set_layer(&mut self, layer: WorkspaceLayer) { - self.layer = layer; - - match layer { - WorkspaceLayer::Tiling => { - self.float_override = None; - } - WorkspaceLayer::Floating => { - self.float_override = Some(true); - } - } - } - pub fn container_for_window(&self, hwnd: isize) -> Option<&Container> { self.containers().get(self.container_idx_for_window(hwnd)?) }