Add the project search as an item in the status bar (#28388)

Was chatting with @wilhelmklopp, he pointed out that our current
UI-accessible way to access the project search was pretty obscure.


<img width="393" alt="Screenshot 2025-04-08 at 6 57 51 PM"
src="https://github.com/user-attachments/assets/636053cd-5a88-4a5e-8155-6d41d189b7db"
/>

Release Notes:

- Added a button to open the project search to the status bar
This commit is contained in:
Mikayla Maki 2025-04-08 19:13:48 -06:00 committed by GitHub
parent 38d2487630
commit 020a1071d5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 50 additions and 0 deletions

View file

@ -12,6 +12,7 @@ use workspace::{Toast, Workspace};
pub mod buffer_search; pub mod buffer_search;
pub mod project_search; pub mod project_search;
pub(crate) mod search_bar; pub(crate) mod search_bar;
pub mod search_status_button;
pub fn init(cx: &mut App) { pub fn init(cx: &mut App) {
menu::init(); menu::init();

View file

@ -0,0 +1,47 @@
use ui::{
ButtonCommon, ButtonLike, Clickable, Color, Context, Icon, IconName, IconSize, ParentElement,
Render, Styled, Tooltip, Window, h_flex,
};
use workspace::{ItemHandle, StatusItemView};
pub struct SearchButton;
impl SearchButton {
pub fn new() -> Self {
Self {}
}
}
impl Render for SearchButton {
fn render(&mut self, _window: &mut Window, cx: &mut Context<Self>) -> impl ui::IntoElement {
h_flex().gap_2().child(
ButtonLike::new("project-search-indicator")
.child(
Icon::new(IconName::MagnifyingGlass)
.size(IconSize::Small)
.color(Color::Default),
)
.tooltip(|window, cx| {
Tooltip::for_action(
"Project Search",
&workspace::DeploySearch::default(),
window,
cx,
)
})
.on_click(cx.listener(|_this, _, window, cx| {
window.dispatch_action(Box::new(workspace::DeploySearch::default()), cx);
})),
)
}
}
impl StatusItemView for SearchButton {
fn set_active_pane_item(
&mut self,
_active_pane_item: Option<&dyn ItemHandle>,
_window: &mut Window,
_cx: &mut Context<Self>,
) {
}
}

View file

@ -222,6 +222,7 @@ pub fn initialize_workspace(
} }
}); });
let search_button = cx.new(|_| search::search_status_button::SearchButton::new());
let diagnostic_summary = let diagnostic_summary =
cx.new(|cx| diagnostics::items::DiagnosticIndicator::new(workspace, cx)); cx.new(|cx| diagnostics::items::DiagnosticIndicator::new(workspace, cx));
let activity_indicator = activity_indicator::ActivityIndicator::new( let activity_indicator = activity_indicator::ActivityIndicator::new(
@ -239,6 +240,7 @@ pub fn initialize_workspace(
let cursor_position = let cursor_position =
cx.new(|_| go_to_line::cursor_position::CursorPosition::new(workspace)); cx.new(|_| go_to_line::cursor_position::CursorPosition::new(workspace));
workspace.status_bar().update(cx, |status_bar, cx| { workspace.status_bar().update(cx, |status_bar, cx| {
status_bar.add_left_item(search_button, window, cx);
status_bar.add_left_item(diagnostic_summary, window, cx); status_bar.add_left_item(diagnostic_summary, window, cx);
status_bar.add_left_item(activity_indicator, window, cx); status_bar.add_left_item(activity_indicator, window, cx);
status_bar.add_right_item(inline_completion_button, window, cx); status_bar.add_right_item(inline_completion_button, window, cx);