aboutsummaryrefslogtreecommitdiff
path: root/src/layout/mod.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-12-30 09:05:35 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2024-12-30 20:12:37 +0300
commita7c57f4fafabed609ef75b92715beb4e7335d823 (patch)
tree92efe12782275f0611fa10dd3663314c679a9822 /src/layout/mod.rs
parent8409107a5bb04980ea196a5d7095d5c34f6b2e4e (diff)
downloadniri-a7c57f4fafabed609ef75b92715beb4e7335d823.tar.gz
niri-a7c57f4fafabed609ef75b92715beb4e7335d823.tar.bz2
niri-a7c57f4fafabed609ef75b92715beb4e7335d823.zip
Add toggle-window-width by-id action
Diffstat (limited to 'src/layout/mod.rs')
-rw-r--r--src/layout/mod.rs31
1 files changed, 31 insertions, 0 deletions
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<W: LayoutElement> Layout<W> {
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<usize>,
+ },
SwitchPresetWindowHeight {
#[proptest(strategy = "proptest::option::of(1..=5usize)")]
id: Option<usize>,
@@ -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());