@@ -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<FocusHandle>,
+}
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<Self>,
+ cx: &mut Context<Self>,
) {
+ self.pane_item_focus_handle = active_pane_item.map(|item| item.item_focus_handle(cx));
}
}