Compute the query editor placeholder text with a focus handle

Nathan Sobo created

So we're not beholden to the current focus.

Change summary

crates/editor2/src/editor.rs        | 7 +++++--
crates/editor2/src/element.rs       | 3 ++-
crates/search2/src/buffer_search.rs | 5 +++--
3 files changed, 10 insertions(+), 5 deletions(-)

Detailed changes

crates/editor2/src/editor.rs 🔗

@@ -2003,8 +2003,11 @@ impl Editor {
         placeholder_text: impl Into<Arc<str>>,
         cx: &mut ViewContext<Self>,
     ) {
-        self.placeholder_text = Some(placeholder_text.into());
-        cx.notify();
+        let placeholder_text = Some(placeholder_text.into());
+        if self.placeholder_text != placeholder_text {
+            self.placeholder_text = placeholder_text;
+            cx.notify();
+        }
     }
 
     pub fn set_cursor_shape(&mut self, cursor_shape: CursorShape, cx: &mut ViewContext<Self>) {

crates/editor2/src/element.rs 🔗

@@ -1722,11 +1722,12 @@ impl EditorElement {
             return Vec::new();
         }
 
-        // When the editor is empty and unfocused, then show the placeholder.
+        // Show the placeholder when the editor is empty
         if snapshot.is_empty() {
             let font_size = self.style.text.font_size.to_pixels(cx.rem_size());
             let placeholder_color = cx.theme().styles.colors.text_placeholder;
             let placeholder_text = snapshot.placeholder_text();
+
             let placeholder_lines = placeholder_text
                 .as_ref()
                 .map_or("", AsRef::as_ref)

crates/search2/src/buffer_search.rs 🔗

@@ -113,8 +113,9 @@ impl Render for BufferSearchBar {
         }
         let supported_options = self.supported_options();
 
+        let query_focus_handle = self.query_editor.focus_handle(cx);
         let previous_query_keystrokes = cx
-            .bindings_for_action(&PreviousHistoryQuery {})
+            .bindings_for_action_in(&PreviousHistoryQuery {}, &query_focus_handle)
             .into_iter()
             .next()
             .map(|binding| {
@@ -125,7 +126,7 @@ impl Render for BufferSearchBar {
                     .collect::<Vec<_>>()
             });
         let next_query_keystrokes = cx
-            .bindings_for_action(&NextHistoryQuery {})
+            .bindings_for_action_in(&NextHistoryQuery {}, &query_focus_handle)
             .into_iter()
             .next()
             .map(|binding| {