aboutsummaryrefslogtreecommitdiff
path: root/src/app/input/overlays.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-07-19 20:44:43 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-07-19 20:44:44 +0300
commita26a654351ee03b1a51d7b398f3bdff2c1ca920d (patch)
tree05382168990e4a6f50f6dbb5220c52fad062923d /src/app/input/overlays.rs
parent01d371bf7a10330c6a5c139c7df766ae8f6f1cda (diff)
feat: connected tree glyphs, workspace grouping, and search auto-select in navigator
refs #1611
Diffstat (limited to 'src/app/input/overlays.rs')
-rw-r--r--src/app/input/overlays.rs16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/app/input/overlays.rs b/src/app/input/overlays.rs
index 20944080..e9cf3139 100644
--- a/src/app/input/overlays.rs
+++ b/src/app/input/overlays.rs
@@ -172,9 +172,8 @@ impl App {
}
MouseEventKind::ScrollUp => {
self.state.navigator.scroll = self.state.navigator.scroll.saturating_sub(3);
- self.state.navigator.selected = self.state.navigator.scroll;
self.state
- .clamp_navigator_selection_from(&self.terminal_runtimes);
+ .align_navigator_selection_to_scroll_from(&self.terminal_runtimes);
}
MouseEventKind::ScrollDown => {
let viewport = self.state.navigator_body_rect().height as usize;
@@ -183,9 +182,8 @@ impl App {
.navigator_max_scroll_from(&self.terminal_runtimes, viewport);
self.state.navigator.scroll =
self.state.navigator.scroll.saturating_add(3).min(max);
- self.state.navigator.selected = self.state.navigator.scroll;
self.state
- .clamp_navigator_selection_from(&self.terminal_runtimes);
+ .align_navigator_selection_to_scroll_from(&self.terminal_runtimes);
}
_ => {}
}
@@ -337,11 +335,17 @@ impl AppState {
if !rect_contains(body, col, row) {
return None;
}
- let idx = self
+ let line_idx = self
.navigator
.scroll
.saturating_add(row.saturating_sub(body.y) as usize);
- (idx < self.navigator_rows_from(terminal_runtimes).len()).then_some(idx)
+ let lines = crate::app::state::navigator_display_lines(
+ &self.navigator_rows_from(terminal_runtimes),
+ );
+ match lines.get(line_idx) {
+ Some(crate::app::state::NavigatorDisplayLine::Row(idx)) => Some(*idx),
+ _ => None,
+ }
}
pub(crate) fn navigator_row_caret_at(&self, col: u16) -> bool {