diff options
Diffstat (limited to 'src/layout/monitor.rs')
| -rw-r--r-- | src/layout/monitor.rs | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/layout/monitor.rs b/src/layout/monitor.rs index c56146a4..b9cd431a 100644 --- a/src/layout/monitor.rs +++ b/src/layout/monitor.rs @@ -328,6 +328,62 @@ impl<W: LayoutElement> Monitor<W> { self.active_workspace().focus_up(); } + pub fn focus_down_or_left(&mut self) { + let workspace = self.active_workspace(); + if !workspace.columns.is_empty() { + let column = &workspace.columns[workspace.active_column_idx]; + let curr_idx = column.active_tile_idx; + let new_idx = min(column.active_tile_idx + 1, column.tiles.len() - 1); + if curr_idx == new_idx { + self.focus_left(); + } else { + workspace.focus_down(); + } + } + } + + pub fn focus_down_or_right(&mut self) { + let workspace = self.active_workspace(); + if !workspace.columns.is_empty() { + let column = &workspace.columns[workspace.active_column_idx]; + let curr_idx = column.active_tile_idx; + let new_idx = min(column.active_tile_idx + 1, column.tiles.len() - 1); + if curr_idx == new_idx { + self.focus_right(); + } else { + workspace.focus_down(); + } + } + } + + pub fn focus_up_or_left(&mut self) { + let workspace = self.active_workspace(); + if !workspace.columns.is_empty() { + let curr_idx = workspace.columns[workspace.active_column_idx].active_tile_idx; + let new_idx = curr_idx.saturating_sub(1); + if curr_idx == new_idx { + self.focus_left(); + } else { + workspace.focus_up(); + } + } + } + + pub fn focus_up_or_right(&mut self) { + let workspace = self.active_workspace(); + if workspace.columns.is_empty() { + self.switch_workspace_up(); + } else { + let curr_idx = workspace.columns[workspace.active_column_idx].active_tile_idx; + let new_idx = curr_idx.saturating_sub(1); + if curr_idx == new_idx { + self.focus_left(); + } else { + workspace.focus_up(); + } + } + } + pub fn focus_window_or_workspace_down(&mut self) { let workspace = self.active_workspace(); if workspace.columns.is_empty() { |
