aboutsummaryrefslogtreecommitdiff
path: root/src/client/shell/mouse.rs
diff options
context:
space:
mode:
authorCan Celik <ogulcancelik@gmail.com>2026-09-19 15:43:47 +0300
committerGitHub <noreply@github.com>2026-09-19 15:43:47 +0300
commite0507237ad8d41f60aece10d00ef29ce2339ca34 (patch)
tree829503bc869cf76285953866367b74a90927a19d /src/client/shell/mouse.rs
parentcc7c696cd0772e466da403eb4e3f00f4e8d8ae1e (diff)
feat: show every agent and terminal in the go to picker (#4384)
Diffstat (limited to 'src/client/shell/mouse.rs')
-rw-r--r--src/client/shell/mouse.rs53
1 files changed, 43 insertions, 10 deletions
diff --git a/src/client/shell/mouse.rs b/src/client/shell/mouse.rs
index 0b9326d0..a7e0dd81 100644
--- a/src/client/shell/mouse.rs
+++ b/src/client/shell/mouse.rs
@@ -1032,6 +1032,22 @@ impl ClientShellState {
}
return;
}
+ Some(ClientChromeDrag::NavigatorScrollbar { grab_row_offset }) => {
+ if let Some(metrics) = self.hits.navigator_scroll_metrics {
+ let offset = crate::ui::scrollbar_offset_from_drag_row(
+ metrics,
+ self.hits.navigator_scrollbar,
+ mouse.row,
+ *grab_row_offset,
+ );
+ self.scroll_navigator_to(
+ metrics.max_offset_from_bottom.saturating_sub(offset),
+ metrics.viewport_rows,
+ );
+ outcome.repaint = true;
+ }
+ return;
+ }
Some(ClientChromeDrag::HelpScrollbar { grab_row_offset }) => {
if let (Some(metrics), Some(ClientShellOverlay::Help(help))) =
(self.hits.help_scroll_metrics, self.overlay.as_mut())
@@ -1317,6 +1333,7 @@ impl ClientShellState {
ClientChromeDrag::WorkspaceScrollbar { .. }
| ClientChromeDrag::AgentScrollbar { .. }
| ClientChromeDrag::HelpScrollbar { .. }
+ | ClientChromeDrag::NavigatorScrollbar { .. }
| ClientChromeDrag::ProductAnnouncementScrollbar { .. }
| ClientChromeDrag::ReleaseNotesScrollbar { .. } => {}
}
@@ -1613,7 +1630,29 @@ impl ClientShellState {
}
}
MouseEventKind::Down(MouseButton::Left) => {
- if super::contains(self.hits.navigator_search, point) {
+ if super::contains(self.hits.navigator_scrollbar, point) {
+ if let Some(metrics) = self.hits.navigator_scroll_metrics {
+ if let Some(grab_row_offset) = crate::ui::scrollbar_thumb_grab_offset(
+ metrics,
+ self.hits.navigator_scrollbar,
+ mouse.row,
+ ) {
+ self.chrome_drag =
+ Some(ClientChromeDrag::NavigatorScrollbar { grab_row_offset });
+ } else {
+ let offset = crate::ui::scrollbar_offset_from_row(
+ metrics,
+ self.hits.navigator_scrollbar,
+ mouse.row,
+ );
+ self.scroll_navigator_to(
+ metrics.max_offset_from_bottom.saturating_sub(offset),
+ metrics.viewport_rows,
+ );
+ outcome.repaint = true;
+ }
+ }
+ } else if super::contains(self.hits.navigator_search, point) {
if let Some(ClientShellOverlay::Navigator(navigator)) =
self.overlay.as_mut()
{
@@ -1621,19 +1660,13 @@ impl ClientShellState {
navigator.filter = None;
}
outcome.repaint = true;
- } else if let Some((rect, target)) = row_hit {
+ } else if let Some((_, target)) = row_hit {
if let Some(ClientShellOverlay::Navigator(navigator)) =
self.overlay.as_mut()
{
- navigator.selected = Some(target.clone());
- }
- let workspace = matches!(target, ClientNavigatorTarget::Workspace { .. });
- if workspace && mouse.column <= rect.x.saturating_add(3) {
- self.toggle_selected_navigator_workspace();
- outcome.repaint = true;
- } else {
- self.accept_navigator_selection(outcome);
+ navigator.selected = Some(target);
}
+ self.accept_navigator_selection(outcome);
} else if !super::contains(self.hits.navigator_popup, point) {
self.overlay = None;
outcome.repaint = true;