From 4b295f566a71c88d9c342b513a5520903e333762 Mon Sep 17 00:00:00 2001 From: Keith Simmons Date: Mon, 11 Apr 2022 15:11:23 -0700 Subject: [PATCH] Handle editor cancel in pane in order to dismiss find toolbar --- crates/editor/src/editor.rs | 46 ++++++++++++++++-------------- crates/search/src/buffer_search.rs | 11 +++++++ 2 files changed, 36 insertions(+), 21 deletions(-) diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index e10fe9c17c..fdb555583c 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -1851,33 +1851,37 @@ impl Editor { return; } - if self.mode != EditorMode::Full { - cx.propagate_action(); - return; - } - - if self.active_diagnostics.is_some() { - self.dismiss_diagnostics(cx); - } else if let Some(pending) = self.pending_selection.clone() { - let mut selections = self.selections.clone(); - if selections.is_empty() { - selections = Arc::from([pending.selection]); + if self.mode == EditorMode::Full { + if self.active_diagnostics.is_some() { + self.dismiss_diagnostics(cx); + return; } - self.set_selections(selections, None, true, cx); - self.request_autoscroll(Autoscroll::Fit, cx); - } else { - let mut oldest_selection = self.oldest_selection::(&cx); - if self.selection_count() == 1 { - if oldest_selection.is_empty() { - cx.propagate_action(); - return; - } + if let Some(pending) = self.pending_selection.clone() { + let mut selections = self.selections.clone(); + if selections.is_empty() { + selections = Arc::from([pending.selection]); + } + self.set_selections(selections, None, true, cx); + self.request_autoscroll(Autoscroll::Fit, cx); + return; + } + + let mut oldest_selection = self.oldest_selection::(&cx); + if self.selection_count() > 1 { + self.update_selections(vec![oldest_selection], Some(Autoscroll::Fit), cx); + return; + } + + if !oldest_selection.is_empty() { oldest_selection.start = oldest_selection.head().clone(); oldest_selection.end = oldest_selection.head().clone(); + self.update_selections(vec![oldest_selection], Some(Autoscroll::Fit), cx); + return; } - self.update_selections(vec![oldest_selection], Some(Autoscroll::Fit), cx); } + + cx.propagate_action(); } #[cfg(any(test, feature = "test-support"))] diff --git a/crates/search/src/buffer_search.rs b/crates/search/src/buffer_search.rs index ffaf8e368d..67ad695d0d 100644 --- a/crates/search/src/buffer_search.rs +++ b/crates/search/src/buffer_search.rs @@ -50,6 +50,7 @@ pub fn init(cx: &mut MutableAppContext) { cx.add_action(BufferSearchBar::toggle_search_option); cx.add_action(BufferSearchBar::select_match); cx.add_action(BufferSearchBar::select_match_on_pane); + cx.add_action(BufferSearchBar::handle_editor_cancel); } pub struct BufferSearchBar { @@ -339,6 +340,16 @@ impl BufferSearchBar { cx.propagate_action(); } + fn handle_editor_cancel(pane: &mut Pane, _: &editor::Cancel, cx: &mut ViewContext) { + if let Some(search_bar) = pane.toolbar().read(cx).item_of_type::() { + if !search_bar.read(cx).dismissed { + search_bar.update(cx, |search_bar, cx| search_bar.dismiss(&Dismiss, cx)); + return; + } + } + cx.propagate_action(); + } + fn focus_editor(&mut self, _: &FocusEditor, cx: &mut ViewContext) { if let Some(active_editor) = self.active_editor.as_ref() { cx.focus(active_editor);