From 0147c328f9db5a82b453c6e4973bab99c813ec1e Mon Sep 17 00:00:00 2001 From: Victoria Brekenfeld Date: Thu, 7 Dec 2023 19:36:03 +0000 Subject: [PATCH] workspace: Add `toggle_stacking`/`toggle_stacking_focused` --- src/input/mod.rs | 5 +++-- src/shell/workspace.rs | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/input/mod.rs b/src/input/mod.rs index 5d2ac908..843d6734 100644 --- a/src/input/mod.rs +++ b/src/input/mod.rs @@ -1821,8 +1821,9 @@ impl State { Action::ToggleStacking => { let output = seat.active_output(); let workspace = self.common.shell.active_space_mut(&output); - let focus_stack = workspace.focus_stack.get_mut(seat); - workspace.tiling_layer.toggle_stacking(seat, focus_stack); + if let Some(new_focus) = workspace.toggle_stacking_focused(seat) { + Common::set_focus(self, Some(&new_focus), seat, Some(serial)); + } } Action::ToggleTiling => { let output = seat.active_output(); diff --git a/src/shell/workspace.rs b/src/shell/workspace.rs index 87be6fb2..2974efe5 100644 --- a/src/shell/workspace.rs +++ b/src/shell/workspace.rs @@ -777,6 +777,33 @@ impl Workspace { } } + pub fn toggle_stacking(&mut self, window: &CosmicMapped) -> Option { + if self.tiling_layer.mapped().any(|(_, m, _)| m == window) { + self.tiling_layer.toggle_stacking(window) + } else if self.floating_layer.mapped().any(|w| w == window) { + self.floating_layer.toggle_stacking(window) + } else { + None + } + } + + pub fn toggle_stacking_focused(&mut self, seat: &Seat) -> Option { + let maybe_window = self.focus_stack.get(seat).iter().next().cloned(); + if let Some(window) = maybe_window { + if self.tiling_layer.mapped().any(|(_, m, _)| m == &window) { + self.tiling_layer + .toggle_stacking_focused(seat, self.focus_stack.get_mut(seat)) + } else if self.floating_layer.mapped().any(|w| w == &window) { + self.floating_layer + .toggle_stacking_focused(seat, self.focus_stack.get_mut(seat)) + } else { + None + } + } else { + None + } + } + pub fn mapped(&self) -> impl Iterator { self.floating_layer .mapped()