aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/config.rs2
-rw-r--r--src/input.rs6
-rw-r--r--src/layout/mod.rs18
-rw-r--r--src/layout/monitor.rs8
-rw-r--r--src/layout/workspace.rs12
5 files changed, 46 insertions, 0 deletions
diff --git a/src/config.rs b/src/config.rs
index 9ca61e20..df9d0ecd 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -313,6 +313,8 @@ pub enum Action {
FullscreenWindow,
FocusColumnLeft,
FocusColumnRight,
+ FocusColumnFirst,
+ FocusColumnLast,
FocusWindowDown,
FocusWindowUp,
FocusWindowOrWorkspaceDown,
diff --git a/src/input.rs b/src/input.rs
index d315754a..9e7e66f2 100644
--- a/src/input.rs
+++ b/src/input.rs
@@ -357,6 +357,12 @@ impl State {
Action::FocusColumnRight => {
self.niri.layout.focus_right();
}
+ Action::FocusColumnFirst => {
+ self.niri.layout.focus_column_first();
+ }
+ Action::FocusColumnLast => {
+ self.niri.layout.focus_column_last();
+ }
Action::FocusWindowDown => {
self.niri.layout.focus_down();
}
diff --git a/src/layout/mod.rs b/src/layout/mod.rs
index c60211a3..02287db6 100644
--- a/src/layout/mod.rs
+++ b/src/layout/mod.rs
@@ -816,6 +816,20 @@ impl<W: LayoutElement> Layout<W> {
monitor.focus_right();
}
+ pub fn focus_column_first(&mut self) {
+ let Some(monitor) = self.active_monitor() else {
+ return;
+ };
+ monitor.focus_column_first();
+ }
+
+ pub fn focus_column_last(&mut self) {
+ let Some(monitor) = self.active_monitor() else {
+ return;
+ };
+ monitor.focus_column_last();
+ }
+
pub fn focus_down(&mut self) {
let Some(monitor) = self.active_monitor() else {
return;
@@ -1524,6 +1538,8 @@ mod tests {
FullscreenWindow(#[proptest(strategy = "1..=5usize")] usize),
FocusColumnLeft,
FocusColumnRight,
+ FocusColumnFirst,
+ FocusColumnLast,
FocusWindowDown,
FocusWindowUp,
FocusWindowOrWorkspaceDown,
@@ -1635,6 +1651,8 @@ mod tests {
}
Op::FocusColumnLeft => layout.focus_left(),
Op::FocusColumnRight => layout.focus_right(),
+ Op::FocusColumnFirst => layout.focus_column_first(),
+ Op::FocusColumnLast => layout.focus_column_last(),
Op::FocusWindowDown => layout.focus_down(),
Op::FocusWindowUp => layout.focus_up(),
Op::FocusWindowOrWorkspaceDown => layout.focus_window_or_workspace_down(),
diff --git a/src/layout/monitor.rs b/src/layout/monitor.rs
index aa4c439e..28d7921e 100644
--- a/src/layout/monitor.rs
+++ b/src/layout/monitor.rs
@@ -197,6 +197,14 @@ impl<W: LayoutElement> Monitor<W> {
self.active_workspace().focus_right();
}
+ pub fn focus_column_first(&mut self) {
+ self.active_workspace().focus_column_first();
+ }
+
+ pub fn focus_column_last(&mut self) {
+ self.active_workspace().focus_column_last();
+ }
+
pub fn focus_down(&mut self) {
self.active_workspace().focus_down();
}
diff --git a/src/layout/workspace.rs b/src/layout/workspace.rs
index aa00b348..d496cd69 100644
--- a/src/layout/workspace.rs
+++ b/src/layout/workspace.rs
@@ -617,6 +617,18 @@ impl<W: LayoutElement> Workspace<W> {
self.activate_column(min(self.active_column_idx + 1, self.columns.len() - 1));
}
+ pub fn focus_column_first(&mut self) {
+ self.activate_column(0);
+ }
+
+ pub fn focus_column_last(&mut self) {
+ if self.columns.is_empty() {
+ return;
+ }
+
+ self.activate_column(self.columns.len() - 1);
+ }
+
pub fn focus_down(&mut self) {
if self.columns.is_empty() {
return;