From 59cd36a2b15b8a5601adae8956d82e3cc39e865a Mon Sep 17 00:00:00 2001 From: LGUG2Z Date: Mon, 27 Jan 2025 08:42:40 -0800 Subject: [PATCH] fix(config): unset values on ws configs appropriately This commit ensures that if a user removes an optional block from the static config file, when reloading a workspace config, the removed option will also be unset in the window manager workspace configuration state. --- komorebi/src/workspace.rs | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/komorebi/src/workspace.rs b/komorebi/src/workspace.rs index a2aed329..876e7b1f 100644 --- a/komorebi/src/workspace.rs +++ b/komorebi/src/workspace.rs @@ -161,34 +161,32 @@ impl Workspace { self.tile = false; } + let mut all_layout_rules = vec![]; if let Some(layout_rules) = &config.layout_rules { - let mut all_rules = vec![]; for (count, rule) in layout_rules { - all_rules.push((*count, Layout::Default(*rule))); + all_layout_rules.push((*count, Layout::Default(*rule))); } - self.set_layout_rules(all_rules); - self.tile = true; } + self.set_layout_rules(all_layout_rules.clone()); + if let Some(layout_rules) = &config.custom_layout_rules { - let rules = self.layout_rules_mut(); for (count, pathbuf) in layout_rules { let rule = CustomLayout::from_path(pathbuf)?; - rules.push((*count, Layout::Custom(rule))); + all_layout_rules.push((*count, Layout::Custom(rule))); } self.tile = true; + self.set_layout_rules(all_layout_rules); } self.set_apply_window_based_work_area_offset( config.apply_window_based_work_area_offset.unwrap_or(true), ); - if config.window_container_behaviour.is_some() { - self.set_window_container_behaviour(config.window_container_behaviour); - } + self.set_window_container_behaviour(config.window_container_behaviour); if let Some(window_container_behaviour_rules) = &config.window_container_behaviour_rules { if window_container_behaviour_rules.is_empty() { @@ -201,15 +199,13 @@ impl Workspace { self.set_window_container_behaviour_rules(Some(all_rules)); } + } else { + self.set_window_container_behaviour_rules(None); + self.set_window_container_behaviour(None); } - if config.float_override.is_some() { - self.set_float_override(config.float_override); - } - - if config.layout_flip.is_some() { - self.set_layout_flip(config.layout_flip); - } + self.set_float_override(config.float_override); + self.set_layout_flip(config.layout_flip); Ok(()) }