From 23ac3d73232f307186212293713d6801d37cff2a Mon Sep 17 00:00:00 2001 From: FluxTape Date: Tue, 19 Mar 2024 14:27:52 +0000 Subject: Workspace back and forth (#253) * implement workspace back and forth * Make our own ID counter instead of SerialCounter, use a newtype * Rename FocusWorkspaceBackAndForth to FocusWorkspacePrevious * Add focus-workspace-previous to tests * Don't special case in switch_workspace_previous * Minor clean up * Add switch_workspace_auto_back_and_forth to tests * Skip animation on switch_workspace_previous * Preserve previous_workspace_id on workspace movement * Make Workspace::id private with a getter Reduce the chance it gets overwritten. * Add test for workspace ID uniqueness * Update previous workspace ID upon moving workspace across monitors --------- Co-authored-by: Ivan Molodetskikh --- src/input.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/input.rs') diff --git a/src/input.rs b/src/input.rs index 1d99f550..35a612bc 100644 --- a/src/input.rs +++ b/src/input.rs @@ -569,11 +569,23 @@ impl State { } Action::FocusWorkspace(idx) => { let idx = idx.saturating_sub(1) as usize; - self.niri.layout.switch_workspace(idx); + + let config = &self.niri.config; + if config.borrow().input.workspace_auto_back_and_forth { + self.niri.layout.switch_workspace_auto_back_and_forth(idx); + } else { + self.niri.layout.switch_workspace(idx); + } + self.maybe_warp_cursor_to_focus(); // FIXME: granular self.niri.queue_redraw_all(); } + Action::FocusWorkspacePrevious => { + self.niri.layout.switch_workspace_previous(); + // FIXME: granular + self.niri.queue_redraw_all(); + } Action::MoveWorkspaceDown => { self.niri.layout.move_workspace_down(); // FIXME: granular -- cgit