From 61ab1834c799b1bd6c42dce1053ed0aca6bde643 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Wed, 13 Dec 2023 13:06:53 -0500 Subject: [PATCH] Deploy the buffer search in a second row in the toolbar (#3630) This PR updates the buffer search to deploy to a second row in the toolbar, instead of trying to deploy into the initial row. This is the same way it works in Zed1. Release Notes: - N/A --- crates/search2/src/buffer_search.rs | 8 +++++++- crates/workspace2/src/toolbar.rs | 16 +++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/crates/search2/src/buffer_search.rs b/crates/search2/src/buffer_search.rs index 2598049ce6..45495e5027 100644 --- a/crates/search2/src/buffer_search.rs +++ b/crates/search2/src/buffer_search.rs @@ -23,7 +23,7 @@ use util::ResultExt; use workspace::{ item::ItemHandle, searchable::{Direction, SearchEvent, SearchableItemHandle, WeakSearchableItemHandle}, - ToolbarItemLocation, ToolbarItemView, Workspace, + ToolbarItemEvent, ToolbarItemLocation, ToolbarItemView, Workspace, }; #[derive(PartialEq, Clone, Deserialize)] @@ -456,6 +456,9 @@ impl BufferSearchBar { cx.focus(&handle); } cx.emit(Event::UpdateLocation); + cx.emit(ToolbarItemEvent::ChangeLocation( + ToolbarItemLocation::Hidden, + )); cx.notify(); } @@ -488,6 +491,9 @@ impl BufferSearchBar { self.dismissed = false; cx.notify(); cx.emit(Event::UpdateLocation); + cx.emit(ToolbarItemEvent::ChangeLocation( + ToolbarItemLocation::Secondary, + )); true } diff --git a/crates/workspace2/src/toolbar.rs b/crates/workspace2/src/toolbar.rs index 1cc71e4d84..7971df40ff 100644 --- a/crates/workspace2/src/toolbar.rs +++ b/crates/workspace2/src/toolbar.rs @@ -74,12 +74,24 @@ impl Toolbar { } }) } + + fn secondary_items(&self) -> impl Iterator { + self.items.iter().filter_map(|(item, location)| { + if *location == ToolbarItemLocation::Secondary { + Some(item.as_ref()) + } else { + None + } + }) + } } impl Render for Toolbar { type Element = Div; fn render(&mut self, cx: &mut ViewContext) -> Self::Element { + let secondary_item = self.secondary_items().next().map(|item| item.to_any()); + v_stack() .border_b() .border_color(cx.theme().colors().border_variant) @@ -87,8 +99,10 @@ impl Render for Toolbar { .child( h_stack() .justify_between() - .children(self.items.iter().map(|(child, _)| child.to_any())), + .child(h_stack().children(self.left_items().map(|item| item.to_any()))) + .child(h_stack().children(self.right_items().map(|item| item.to_any()))), ) + .children(secondary_item) } }