diff --git a/crates/search/src/search.rs b/crates/search/src/search.rs index 593950d4e4..944060ea07 100644 --- a/crates/search/src/search.rs +++ b/crates/search/src/search.rs @@ -12,6 +12,7 @@ use workspace::{Toast, Workspace}; pub mod buffer_search; pub mod project_search; pub(crate) mod search_bar; +pub mod search_status_button; pub fn init(cx: &mut App) { menu::init(); diff --git a/crates/search/src/search_status_button.rs b/crates/search/src/search_status_button.rs new file mode 100644 index 0000000000..7d984c148f --- /dev/null +++ b/crates/search/src/search_status_button.rs @@ -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) -> 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, + ) { + } +} diff --git a/crates/zed/src/zed.rs b/crates/zed/src/zed.rs index a6c230d829..1c2db58e27 100644 --- a/crates/zed/src/zed.rs +++ b/crates/zed/src/zed.rs @@ -222,6 +222,7 @@ pub fn initialize_workspace( } }); + let search_button = cx.new(|_| search::search_status_button::SearchButton::new()); let diagnostic_summary = cx.new(|cx| diagnostics::items::DiagnosticIndicator::new(workspace, cx)); let activity_indicator = activity_indicator::ActivityIndicator::new( @@ -239,6 +240,7 @@ pub fn initialize_workspace( let cursor_position = cx.new(|_| go_to_line::cursor_position::CursorPosition::new(workspace)); 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(activity_indicator, window, cx); status_bar.add_right_item(inline_completion_button, window, cx);