From b1ca0a3e3cfa38e618144a6a341904f6530d309a Mon Sep 17 00:00:00 2001 From: LGUG2Z Date: Fri, 19 Nov 2021 16:34:35 -0800 Subject: [PATCH] feat(wm): enforce last known layout on unpause This commit ensures that the last known layout is restored on a workspace when a command to unpause has been received. --- komorebi/src/process_command.rs | 7 ++++--- komorebi/src/window_manager.rs | 8 +++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/komorebi/src/process_command.rs b/komorebi/src/process_command.rs index 7a25f8d3..b66eeecb 100644 --- a/komorebi/src/process_command.rs +++ b/komorebi/src/process_command.rs @@ -143,6 +143,7 @@ impl WindowManager { } self.is_paused = !self.is_paused; + self.retile_all(true)?; } SocketMessage::ToggleTiling => { self.toggle_tiling()?; @@ -161,7 +162,7 @@ impl WindowManager { self.focus_monitor(monitor_idx)?; self.update_focused_workspace(self.mouse_follows_focus)?; } - SocketMessage::Retile => self.retile_all()?, + SocketMessage::Retile => self.retile_all(false)?, SocketMessage::FlipLayout(layout_flip) => self.flip_layout(layout_flip)?, SocketMessage::ChangeLayout(layout) => self.change_workspace_layout_default(layout)?, SocketMessage::ChangeLayoutCustom(path) => self.change_workspace_custom_layout(path)?, @@ -464,11 +465,11 @@ impl WindowManager { } SocketMessage::InvisibleBorders(rect) => { self.invisible_borders = rect; - self.retile_all()?; + self.retile_all(false)?; } SocketMessage::WorkAreaOffset(rect) => { self.work_area_offset = Option::from(rect); - self.retile_all()?; + self.retile_all(false)?; } SocketMessage::QuickSave => { let workspace = self.focused_workspace()?; diff --git a/komorebi/src/window_manager.rs b/komorebi/src/window_manager.rs index f77f1fe2..0292a0cc 100644 --- a/komorebi/src/window_manager.rs +++ b/komorebi/src/window_manager.rs @@ -443,7 +443,7 @@ impl WindowManager { } #[tracing::instrument(skip(self))] - pub fn retile_all(&mut self) -> Result<()> { + pub fn retile_all(&mut self, preserve_resize_dimensions: bool) -> Result<()> { let invisible_borders = self.invisible_borders; let offset = self.work_area_offset; @@ -454,8 +454,10 @@ impl WindowManager { .ok_or_else(|| anyhow!("there is no workspace"))?; // Reset any resize adjustments if we want to force a retile - for resize in workspace.resize_dimensions_mut() { - *resize = None; + if !preserve_resize_dimensions { + for resize in workspace.resize_dimensions_mut() { + *resize = None; + } } workspace.update(&work_area, offset, &invisible_borders)?;