From 56174b2c347b1de8f278fe1a2b0401ae5bfe528d Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Fri, 29 Dec 2023 08:01:02 +0400 Subject: Add move-column-to-{first,last} --- src/config.rs | 2 ++ src/input.rs | 10 ++++++++++ src/layout/mod.rs | 18 ++++++++++++++++++ src/layout/monitor.rs | 8 ++++++++ src/layout/workspace.rs | 13 +++++++++++++ 5 files changed, 51 insertions(+) (limited to 'src') diff --git a/src/config.rs b/src/config.rs index df9d0ecd..6b4b94cc 100644 --- a/src/config.rs +++ b/src/config.rs @@ -321,6 +321,8 @@ pub enum Action { FocusWindowOrWorkspaceUp, MoveColumnLeft, MoveColumnRight, + MoveColumnToFirst, + MoveColumnToLast, MoveWindowDown, MoveWindowUp, MoveWindowDownOrToWorkspaceDown, diff --git a/src/input.rs b/src/input.rs index 9e7e66f2..117b212d 100644 --- a/src/input.rs +++ b/src/input.rs @@ -331,6 +331,16 @@ impl State { // FIXME: granular self.niri.queue_redraw_all(); } + Action::MoveColumnToFirst => { + self.niri.layout.move_column_to_first(); + // FIXME: granular + self.niri.queue_redraw_all(); + } + Action::MoveColumnToLast => { + self.niri.layout.move_column_to_last(); + // FIXME: granular + self.niri.queue_redraw_all(); + } Action::MoveWindowDown => { self.niri.layout.move_down(); // FIXME: granular diff --git a/src/layout/mod.rs b/src/layout/mod.rs index 02287db6..48d7ed9e 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -774,6 +774,20 @@ impl Layout { monitor.move_right(); } + pub fn move_column_to_first(&mut self) { + let Some(monitor) = self.active_monitor() else { + return; + }; + monitor.move_column_to_first(); + } + + pub fn move_column_to_last(&mut self) { + let Some(monitor) = self.active_monitor() else { + return; + }; + monitor.move_column_to_last(); + } + pub fn move_down(&mut self) { let Some(monitor) = self.active_monitor() else { return; @@ -1546,6 +1560,8 @@ mod tests { FocusWindowOrWorkspaceUp, MoveColumnLeft, MoveColumnRight, + MoveColumnToFirst, + MoveColumnToLast, MoveWindowDown, MoveWindowUp, MoveWindowDownOrToWorkspaceDown, @@ -1659,6 +1675,8 @@ mod tests { Op::FocusWindowOrWorkspaceUp => layout.focus_window_or_workspace_up(), Op::MoveColumnLeft => layout.move_left(), Op::MoveColumnRight => layout.move_right(), + Op::MoveColumnToFirst => layout.move_column_to_first(), + Op::MoveColumnToLast => layout.move_column_to_last(), Op::MoveWindowDown => layout.move_down(), Op::MoveWindowUp => layout.move_up(), Op::MoveWindowDownOrToWorkspaceDown => layout.move_down_or_to_workspace_down(), diff --git a/src/layout/monitor.rs b/src/layout/monitor.rs index 28d7921e..e87907cc 100644 --- a/src/layout/monitor.rs +++ b/src/layout/monitor.rs @@ -152,6 +152,14 @@ impl Monitor { self.active_workspace().move_right(); } + pub fn move_column_to_first(&mut self) { + self.active_workspace().move_column_to_first(); + } + + pub fn move_column_to_last(&mut self) { + self.active_workspace().move_column_to_last(); + } + pub fn move_down(&mut self) { self.active_workspace().move_down(); } diff --git a/src/layout/workspace.rs b/src/layout/workspace.rs index 7fced686..799552b0 100644 --- a/src/layout/workspace.rs +++ b/src/layout/workspace.rs @@ -674,6 +674,19 @@ impl Workspace { self.move_column_to(new_idx); } + pub fn move_column_to_first(&mut self) { + self.move_column_to(0); + } + + pub fn move_column_to_last(&mut self) { + if self.columns.is_empty() { + return; + } + + let new_idx = self.columns.len() - 1; + self.move_column_to(new_idx); + } + pub fn move_down(&mut self) { if self.columns.is_empty() { return; -- cgit