From a7c57f4fafabed609ef75b92715beb4e7335d823 Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Mon, 30 Dec 2024 09:05:35 +0300 Subject: Add toggle-window-width by-id action --- src/layout/mod.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'src/layout/mod.rs') diff --git a/src/layout/mod.rs b/src/layout/mod.rs index 97d3d1e1..081a5f35 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -2607,6 +2607,29 @@ impl Layout { monitor.toggle_width(); } + pub fn toggle_window_width(&mut self, window: Option<&W::Id>) { + if let Some(InteractiveMoveState::Moving(move_)) = &mut self.interactive_move { + if window.is_none() || window == Some(move_.tile.window().id()) { + return; + } + } + + let workspace = if let Some(window) = window { + Some( + self.workspaces_mut() + .find(|ws| ws.has_window(window)) + .unwrap(), + ) + } else { + self.active_workspace_mut() + }; + + let Some(workspace) = workspace else { + return; + }; + workspace.toggle_window_width(window); + } + pub fn toggle_window_height(&mut self, window: Option<&W::Id>) { if let Some(InteractiveMoveState::Moving(move_)) = &mut self.interactive_move { if window.is_none() || window == Some(move_.tile.window().id()) { @@ -4474,6 +4497,10 @@ mod tests { }, MoveColumnToOutput(#[proptest(strategy = "1..=5usize")] usize), SwitchPresetColumnWidth, + SwitchPresetWindowWidth { + #[proptest(strategy = "proptest::option::of(1..=5usize)")] + id: Option, + }, SwitchPresetWindowHeight { #[proptest(strategy = "proptest::option::of(1..=5usize)")] id: Option, @@ -5009,6 +5036,10 @@ mod tests { Op::MoveWorkspaceDown => layout.move_workspace_down(), Op::MoveWorkspaceUp => layout.move_workspace_up(), Op::SwitchPresetColumnWidth => layout.toggle_width(), + Op::SwitchPresetWindowWidth { id } => { + let id = id.filter(|id| layout.has_window(id)); + layout.toggle_window_width(id.as_ref()); + } Op::SwitchPresetWindowHeight { id } => { let id = id.filter(|id| layout.has_window(id)); layout.toggle_window_height(id.as_ref()); -- cgit