aboutsummaryrefslogtreecommitdiff
path: root/src/layout/mod.rs
diff options
context:
space:
mode:
authorMicah N Gorrell <m@minego.net>2024-05-22 13:53:44 -0600
committerIvan Molodetskikh <yalterz@gmail.com>2024-05-24 16:44:20 +0400
commiteb0f7aa4293b7d65c47fd53df9a9880e7a2c75d7 (patch)
tree9d9b9df2a0df1fb19c3d21399fef9b8aca1d264e /src/layout/mod.rs
parentbcca03cce7da9dc4125aa34943041cb65e0fd4bb (diff)
downloadniri-eb0f7aa4293b7d65c47fd53df9a9880e7a2c75d7.tar.gz
niri-eb0f7aa4293b7d65c47fd53df9a9880e7a2c75d7.tar.bz2
niri-eb0f7aa4293b7d65c47fd53df9a9880e7a2c75d7.zip
Added actions to allow focusing up or down as normal but to wrap to the column to the left or right if there is no window above or below
Diffstat (limited to 'src/layout/mod.rs')
-rw-r--r--src/layout/mod.rs44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/layout/mod.rs b/src/layout/mod.rs
index 02eeda3b..6e8fa292 100644
--- a/src/layout/mod.rs
+++ b/src/layout/mod.rs
@@ -1249,6 +1249,34 @@ impl<W: LayoutElement> Layout<W> {
monitor.focus_up();
}
+ pub fn focus_down_or_left(&mut self) {
+ let Some(monitor) = self.active_monitor() else {
+ return;
+ };
+ monitor.focus_down_or_left();
+ }
+
+ pub fn focus_down_or_right(&mut self) {
+ let Some(monitor) = self.active_monitor() else {
+ return;
+ };
+ monitor.focus_down_or_right();
+ }
+
+ pub fn focus_up_or_left(&mut self) {
+ let Some(monitor) = self.active_monitor() else {
+ return;
+ };
+ monitor.focus_up_or_left();
+ }
+
+ pub fn focus_up_or_right(&mut self) {
+ let Some(monitor) = self.active_monitor() else {
+ return;
+ };
+ monitor.focus_up_or_right();
+ }
+
pub fn focus_window_or_workspace_down(&mut self) {
let Some(monitor) = self.active_monitor() else {
return;
@@ -2603,6 +2631,10 @@ mod tests {
FocusColumnLast,
FocusWindowDown,
FocusWindowUp,
+ FocusWindowDownOrColumnLeft,
+ FocusWindowDownOrColumnRight,
+ FocusWindowUpOrColumnLeft,
+ FocusWindowUpOrColumnRight,
FocusWindowOrWorkspaceDown,
FocusWindowOrWorkspaceUp,
MoveColumnLeft,
@@ -2887,6 +2919,10 @@ mod tests {
Op::FocusColumnLast => layout.focus_column_last(),
Op::FocusWindowDown => layout.focus_down(),
Op::FocusWindowUp => layout.focus_up(),
+ Op::FocusWindowDownOrColumnLeft => layout.focus_down_or_left(),
+ Op::FocusWindowDownOrColumnRight => layout.focus_down_or_right(),
+ Op::FocusWindowUpOrColumnLeft => layout.focus_up_or_left(),
+ Op::FocusWindowUpOrColumnRight => layout.focus_up_or_right(),
Op::FocusWindowOrWorkspaceDown => layout.focus_window_or_workspace_down(),
Op::FocusWindowOrWorkspaceUp => layout.focus_window_or_workspace_up(),
Op::MoveColumnLeft => layout.move_left(),
@@ -3098,8 +3134,12 @@ mod tests {
Op::FocusColumnLeft,
Op::FocusColumnRight,
Op::FocusWindowUp,
+ Op::FocusWindowUpOrColumnLeft,
+ Op::FocusWindowUpOrColumnRight,
Op::FocusWindowOrWorkspaceUp,
Op::FocusWindowDown,
+ Op::FocusWindowDownOrColumnLeft,
+ Op::FocusWindowDownOrColumnRight,
Op::FocusWindowOrWorkspaceDown,
Op::MoveColumnLeft,
Op::MoveColumnRight,
@@ -3251,8 +3291,12 @@ mod tests {
Op::FocusColumnLeft,
Op::FocusColumnRight,
Op::FocusWindowUp,
+ Op::FocusWindowUpOrColumnLeft,
+ Op::FocusWindowUpOrColumnRight,
Op::FocusWindowOrWorkspaceUp,
Op::FocusWindowDown,
+ Op::FocusWindowDownOrColumnLeft,
+ Op::FocusWindowDownOrColumnRight,
Op::FocusWindowOrWorkspaceDown,
Op::MoveColumnLeft,
Op::MoveColumnRight,