search: Retain replace status when re-deploying active search panels (#44862)

Lukas Wirth created

Closes https://github.com/zed-industries/zed/issues/15918

Release Notes:

- Fixed search bars losing their replace state if you re-focus on them
via actions or keybinds

Change summary

crates/search/src/buffer_search.rs  | 14 ++++++++------
crates/search/src/project_search.rs |  2 +-
2 files changed, 9 insertions(+), 7 deletions(-)

Detailed changes

crates/search/src/buffer_search.rs 🔗

@@ -729,12 +729,14 @@ impl BufferSearchBar {
             self.search_suggested(window, cx);
             self.smartcase(window, cx);
             self.sync_select_next_case_sensitivity(cx);
-            self.replace_enabled = deploy.replace_enabled;
-            self.selection_search_enabled = if deploy.selection_search_enabled {
-                Some(FilteredSearchRange::Default)
-            } else {
-                None
-            };
+            self.replace_enabled |= deploy.replace_enabled;
+            self.selection_search_enabled =
+                self.selection_search_enabled
+                    .or(if deploy.selection_search_enabled {
+                        Some(FilteredSearchRange::Default)
+                    } else {
+                        None
+                    });
             if deploy.focus {
                 let mut handle = self.query_editor.focus_handle(cx);
                 let mut select_query = true;

crates/search/src/project_search.rs 🔗

@@ -1147,7 +1147,7 @@ impl ProjectSearchView {
         };
 
         search.update(cx, |search, cx| {
-            search.replace_enabled = action.replace_enabled;
+            search.replace_enabled |= action.replace_enabled;
             if let Some(query) = query {
                 search.set_query(&query, window, cx);
             }