mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-23 02:05:33 +07:00
Add focus-column-right-or-first, focus-column-left-or-last (#391)
* add focus-column-right-or-first * add focus-column-left-or-last
This commit is contained in:
@@ -942,6 +942,8 @@ pub enum Action {
|
|||||||
FocusColumnRight,
|
FocusColumnRight,
|
||||||
FocusColumnFirst,
|
FocusColumnFirst,
|
||||||
FocusColumnLast,
|
FocusColumnLast,
|
||||||
|
FocusColumnRightOrFirst,
|
||||||
|
FocusColumnLeftOrLast,
|
||||||
FocusWindowDown,
|
FocusWindowDown,
|
||||||
FocusWindowUp,
|
FocusWindowUp,
|
||||||
FocusWindowDownOrColumnLeft,
|
FocusWindowDownOrColumnLeft,
|
||||||
@@ -1016,6 +1018,8 @@ impl From<niri_ipc::Action> for Action {
|
|||||||
niri_ipc::Action::FocusColumnRight => Self::FocusColumnRight,
|
niri_ipc::Action::FocusColumnRight => Self::FocusColumnRight,
|
||||||
niri_ipc::Action::FocusColumnFirst => Self::FocusColumnFirst,
|
niri_ipc::Action::FocusColumnFirst => Self::FocusColumnFirst,
|
||||||
niri_ipc::Action::FocusColumnLast => Self::FocusColumnLast,
|
niri_ipc::Action::FocusColumnLast => Self::FocusColumnLast,
|
||||||
|
niri_ipc::Action::FocusColumnRightOrFirst => Self::FocusColumnRightOrFirst,
|
||||||
|
niri_ipc::Action::FocusColumnLeftOrLast => Self::FocusColumnLeftOrLast,
|
||||||
niri_ipc::Action::FocusWindowDown => Self::FocusWindowDown,
|
niri_ipc::Action::FocusWindowDown => Self::FocusWindowDown,
|
||||||
niri_ipc::Action::FocusWindowUp => Self::FocusWindowUp,
|
niri_ipc::Action::FocusWindowUp => Self::FocusWindowUp,
|
||||||
niri_ipc::Action::FocusWindowDownOrColumnLeft => Self::FocusWindowDownOrColumnLeft,
|
niri_ipc::Action::FocusWindowDownOrColumnLeft => Self::FocusWindowDownOrColumnLeft,
|
||||||
|
|||||||
@@ -116,6 +116,10 @@ pub enum Action {
|
|||||||
FocusColumnFirst,
|
FocusColumnFirst,
|
||||||
/// Focus the last column.
|
/// Focus the last column.
|
||||||
FocusColumnLast,
|
FocusColumnLast,
|
||||||
|
/// Focus the next column to the right, looping if at end.
|
||||||
|
FocusColumnRightOrFirst,
|
||||||
|
/// Focus the next column to the left, looping if at start.
|
||||||
|
FocusColumnLeftOrLast,
|
||||||
/// Focus the window below.
|
/// Focus the window below.
|
||||||
FocusWindowDown,
|
FocusWindowDown,
|
||||||
/// Focus the window above.
|
/// Focus the window above.
|
||||||
|
|||||||
@@ -565,6 +565,18 @@ impl State {
|
|||||||
// FIXME: granular
|
// FIXME: granular
|
||||||
self.niri.queue_redraw_all();
|
self.niri.queue_redraw_all();
|
||||||
}
|
}
|
||||||
|
Action::FocusColumnRightOrFirst => {
|
||||||
|
self.niri.layout.focus_column_right_or_first();
|
||||||
|
self.maybe_warp_cursor_to_focus();
|
||||||
|
// FIXME: granular
|
||||||
|
self.niri.queue_redraw_all();
|
||||||
|
}
|
||||||
|
Action::FocusColumnLeftOrLast => {
|
||||||
|
self.niri.layout.focus_column_left_or_last();
|
||||||
|
self.maybe_warp_cursor_to_focus();
|
||||||
|
// FIXME: granular
|
||||||
|
self.niri.queue_redraw_all();
|
||||||
|
}
|
||||||
Action::FocusWindowDown => {
|
Action::FocusWindowDown => {
|
||||||
self.niri.layout.focus_down();
|
self.niri.layout.focus_down();
|
||||||
self.maybe_warp_cursor_to_focus();
|
self.maybe_warp_cursor_to_focus();
|
||||||
|
|||||||
@@ -1235,6 +1235,20 @@ impl<W: LayoutElement> Layout<W> {
|
|||||||
monitor.focus_column_last();
|
monitor.focus_column_last();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn focus_column_right_or_first(&mut self) {
|
||||||
|
let Some(monitor) = self.active_monitor() else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
monitor.focus_column_right_or_first();
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn focus_column_left_or_last(&mut self) {
|
||||||
|
let Some(monitor) = self.active_monitor() else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
monitor.focus_column_left_or_last();
|
||||||
|
}
|
||||||
|
|
||||||
pub fn focus_down(&mut self) {
|
pub fn focus_down(&mut self) {
|
||||||
let Some(monitor) = self.active_monitor() else {
|
let Some(monitor) = self.active_monitor() else {
|
||||||
return;
|
return;
|
||||||
@@ -2634,6 +2648,8 @@ mod tests {
|
|||||||
FocusColumnRight,
|
FocusColumnRight,
|
||||||
FocusColumnFirst,
|
FocusColumnFirst,
|
||||||
FocusColumnLast,
|
FocusColumnLast,
|
||||||
|
FocusColumnRightOrFirst,
|
||||||
|
FocusColumnLeftOrLast,
|
||||||
FocusWindowDown,
|
FocusWindowDown,
|
||||||
FocusWindowUp,
|
FocusWindowUp,
|
||||||
FocusWindowDownOrColumnLeft,
|
FocusWindowDownOrColumnLeft,
|
||||||
@@ -2928,6 +2944,8 @@ mod tests {
|
|||||||
Op::FocusColumnRight => layout.focus_right(),
|
Op::FocusColumnRight => layout.focus_right(),
|
||||||
Op::FocusColumnFirst => layout.focus_column_first(),
|
Op::FocusColumnFirst => layout.focus_column_first(),
|
||||||
Op::FocusColumnLast => layout.focus_column_last(),
|
Op::FocusColumnLast => layout.focus_column_last(),
|
||||||
|
Op::FocusColumnRightOrFirst => layout.focus_column_right_or_first(),
|
||||||
|
Op::FocusColumnLeftOrLast => layout.focus_column_left_or_last(),
|
||||||
Op::FocusWindowDown => layout.focus_down(),
|
Op::FocusWindowDown => layout.focus_down(),
|
||||||
Op::FocusWindowUp => layout.focus_up(),
|
Op::FocusWindowUp => layout.focus_up(),
|
||||||
Op::FocusWindowDownOrColumnLeft => layout.focus_down_or_left(),
|
Op::FocusWindowDownOrColumnLeft => layout.focus_down_or_left(),
|
||||||
@@ -3144,6 +3162,8 @@ mod tests {
|
|||||||
Op::FullscreenWindow(3),
|
Op::FullscreenWindow(3),
|
||||||
Op::FocusColumnLeft,
|
Op::FocusColumnLeft,
|
||||||
Op::FocusColumnRight,
|
Op::FocusColumnRight,
|
||||||
|
Op::FocusColumnRightOrFirst,
|
||||||
|
Op::FocusColumnLeftOrLast,
|
||||||
Op::FocusWindowUp,
|
Op::FocusWindowUp,
|
||||||
Op::FocusWindowUpOrColumnLeft,
|
Op::FocusWindowUpOrColumnLeft,
|
||||||
Op::FocusWindowUpOrColumnRight,
|
Op::FocusWindowUpOrColumnRight,
|
||||||
@@ -3317,6 +3337,8 @@ mod tests {
|
|||||||
},
|
},
|
||||||
Op::FocusColumnLeft,
|
Op::FocusColumnLeft,
|
||||||
Op::FocusColumnRight,
|
Op::FocusColumnRight,
|
||||||
|
Op::FocusColumnRightOrFirst,
|
||||||
|
Op::FocusColumnLeftOrLast,
|
||||||
Op::FocusWindowUp,
|
Op::FocusWindowUp,
|
||||||
Op::FocusWindowUpOrColumnLeft,
|
Op::FocusWindowUpOrColumnLeft,
|
||||||
Op::FocusWindowUpOrColumnRight,
|
Op::FocusWindowUpOrColumnRight,
|
||||||
|
|||||||
@@ -320,6 +320,14 @@ impl<W: LayoutElement> Monitor<W> {
|
|||||||
self.active_workspace().focus_column_last();
|
self.active_workspace().focus_column_last();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn focus_column_right_or_first(&mut self) {
|
||||||
|
self.active_workspace().focus_column_right_or_first();
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn focus_column_left_or_last(&mut self) {
|
||||||
|
self.active_workspace().focus_column_left_or_last();
|
||||||
|
}
|
||||||
|
|
||||||
pub fn focus_down(&mut self) {
|
pub fn focus_down(&mut self) {
|
||||||
self.active_workspace().focus_down();
|
self.active_workspace().focus_down();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1536,6 +1536,28 @@ impl<W: LayoutElement> Workspace<W> {
|
|||||||
self.activate_column(self.columns.len() - 1);
|
self.activate_column(self.columns.len() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn focus_column_right_or_first(&mut self) {
|
||||||
|
if self.columns.is_empty() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let column_idx = (self.active_column_idx + 1) % self.columns.len();
|
||||||
|
self.activate_column(column_idx);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn focus_column_left_or_last(&mut self) {
|
||||||
|
if self.columns.is_empty() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let column_idx = if self.active_column_idx == 0 {
|
||||||
|
self.columns.len() - 1
|
||||||
|
} else {
|
||||||
|
self.active_column_idx - 1
|
||||||
|
};
|
||||||
|
self.activate_column(column_idx);
|
||||||
|
}
|
||||||
|
|
||||||
pub fn focus_down(&mut self) {
|
pub fn focus_down(&mut self) {
|
||||||
if self.columns.is_empty() {
|
if self.columns.is_empty() {
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user