diff --git a/crates/search/src/search_status_button.rs b/crates/search/src/search_status_button.rs index 712a322c1094f28ea601d6d170e7be1e395e25f7..5faab32d424df832f55d18059b4485c77eaccdfb 100644 --- a/crates/search/src/search_status_button.rs +++ b/crates/search/src/search_status_button.rs @@ -1,15 +1,20 @@ use editor::EditorSettings; +use gpui::FocusHandle; use settings::Settings as _; use ui::{ButtonCommon, Clickable, Context, Render, Tooltip, Window, prelude::*}; use workspace::{ItemHandle, StatusItemView}; pub const SEARCH_ICON: IconName = IconName::MagnifyingGlass; -pub struct SearchButton; +pub struct SearchButton { + pane_item_focus_handle: Option, +} impl SearchButton { pub fn new() -> Self { - Self {} + Self { + pane_item_focus_handle: None, + } } } @@ -21,11 +26,25 @@ impl Render for SearchButton { return button.hidden(); } + let focus_handle = self.pane_item_focus_handle.clone(); button.child( IconButton::new("project-search-indicator", SEARCH_ICON) .icon_size(IconSize::Small) - .tooltip(|_window, cx| { - Tooltip::for_action("Project Search", &workspace::DeploySearch::default(), cx) + .tooltip(move |_window, cx| { + if let Some(focus_handle) = &focus_handle { + Tooltip::for_action_in( + "Project Search", + &workspace::DeploySearch::default(), + focus_handle, + cx, + ) + } else { + Tooltip::for_action( + "Project Search", + &workspace::DeploySearch::default(), + cx, + ) + } }) .on_click(cx.listener(|_this, _, window, cx| { window.dispatch_action(Box::new(workspace::DeploySearch::default()), cx); @@ -37,9 +56,10 @@ impl Render for SearchButton { impl StatusItemView for SearchButton { fn set_active_pane_item( &mut self, - _active_pane_item: Option<&dyn ItemHandle>, + active_pane_item: Option<&dyn ItemHandle>, _window: &mut Window, - _cx: &mut Context, + cx: &mut Context, ) { + self.pane_item_focus_handle = active_pane_item.map(|item| item.item_focus_handle(cx)); } }