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)?) }