@@ -5,7 +5,7 @@ use gpui::{
Action, ClickEvent, Div, ElementId, EventEmitter, InteractiveElement, ParentElement, Render,
Stateful, Styled, Subscription, View, ViewContext, WeakView,
};
-use search::BufferSearchBar;
+use search::{buffer_search, BufferSearchBar};
use ui::{prelude::*, ButtonSize, ButtonStyle, Icon, IconButton, IconSize, Tooltip};
use workspace::{
item::ItemHandle, ToolbarItemEvent, ToolbarItemLocation, ToolbarItemView, Workspace,
@@ -64,12 +64,14 @@ impl Render for QuickActionBar {
"toggle buffer search",
Icon::MagnifyingGlass,
!self.buffer_search_bar.read(cx).is_dismissed(),
- Box::new(search::buffer_search::Deploy { focus: false }),
+ Box::new(buffer_search::Deploy { focus: false }),
"Buffer Search",
{
let buffer_search_bar = self.buffer_search_bar.clone();
move |_, cx| {
- buffer_search_bar.update(cx, |search_bar, cx| search_bar.toggle(cx));
+ buffer_search_bar.update(cx, |search_bar, cx| {
+ search_bar.toggle(&buffer_search::Deploy { focus: true }, cx)
+ });
}
},
))
@@ -11,8 +11,8 @@ use editor::{Editor, EditorMode};
use futures::channel::oneshot;
use gpui::{
actions, div, red, Action, AppContext, Div, EventEmitter, FocusableView,
- InteractiveElement as _, IntoElement, ParentElement as _, Render, Styled, Subscription, Task,
- View, ViewContext, VisualContext as _, WeakView, WindowContext,
+ InteractiveElement as _, IntoElement, KeyContext, ParentElement as _, Render, Styled,
+ Subscription, Task, View, ViewContext, VisualContext as _, WeakView, WindowContext,
};
use project::search::SearchQuery;
use serde::Deserialize;
@@ -170,14 +170,19 @@ impl Render for BufferSearchBar {
h_stack()
.key_context("BufferSearchBar")
- .when(in_replace, |this| {
- this.key_context("in_replace")
- .on_action(cx.listener(Self::replace_next))
- .on_action(cx.listener(Self::replace_all))
- })
.on_action(cx.listener(Self::previous_history_query))
.on_action(cx.listener(Self::next_history_query))
.on_action(cx.listener(Self::dismiss))
+ .on_action(cx.listener(Self::select_next_match))
+ .on_action(cx.listener(Self::select_prev_match))
+ .when(self.supported_options().replacement, |this| {
+ this.on_action(cx.listener(Self::toggle_replace))
+ .when(in_replace, |this| {
+ this.key_context("in_replace")
+ .on_action(cx.listener(Self::replace_next))
+ .on_action(cx.listener(Self::replace_all))
+ })
+ })
.w_full()
.p_1()
.child(
@@ -305,7 +310,7 @@ impl BufferSearchBar {
let handle = cx.view().downgrade();
- editor.register_action(move |a: &Deploy, cx| {
+ editor.register_action(move |deploy: &Deploy, cx| {
let Some(pane) = handle.upgrade().and_then(|editor| editor.read(cx).pane(cx)) else {
return;
};
@@ -313,12 +318,12 @@ impl BufferSearchBar {
pane.update(cx, |this, cx| {
this.toolbar().update(cx, |this, cx| {
if let Some(search_bar) = this.item_of_type::<BufferSearchBar>() {
- search_bar.update(cx, |this, cx| this.toggle(cx));
+ search_bar.update(cx, |this, cx| this.toggle(deploy, cx));
return;
}
let view = cx.build_view(|cx| BufferSearchBar::new(cx));
this.add_item(view.clone(), cx);
- view.update(cx, |this, cx| this.deploy(a, cx));
+ view.update(cx, |this, cx| this.deploy(deploy, cx));
cx.notify();
})
});
@@ -468,7 +473,7 @@ impl BufferSearchBar {
self.search_suggested(cx);
if deploy.focus {
self.select_query(cx);
- let handle = cx.focus_handle();
+ let handle = self.query_editor.focus_handle(cx);
cx.focus(&handle);
}
return true;
@@ -477,9 +482,9 @@ impl BufferSearchBar {
false
}
- pub fn toggle(&mut self, cx: &mut ViewContext<Self>) {
+ pub fn toggle(&mut self, action: &Deploy, cx: &mut ViewContext<Self>) {
if self.is_dismissed() {
- self.show(cx);
+ self.deploy(action, cx);
} else {
self.dismiss(&Dismiss, cx);
}