diff --git a/crates/ui/src/dropdown.rs b/crates/ui/src/dropdown.rs index c10b9030..07e02fa8 100644 --- a/crates/ui/src/dropdown.rs +++ b/crates/ui/src/dropdown.rs @@ -347,7 +347,9 @@ where let searchable = delegate.delegate.can_search(); let list = cx.new(|cx| { - let mut list = List::new(delegate, window, cx).max_h(rems(20.)); + let mut list = List::new(delegate, window, cx) + .max_h(rems(20.)) + .reset_on_cancel(false); if !searchable { list = list.no_query(); } diff --git a/crates/ui/src/list/list.rs b/crates/ui/src/list/list.rs index 814b826e..a0b00309 100644 --- a/crates/ui/src/list/list.rs +++ b/crates/ui/src/list/list.rs @@ -156,6 +156,7 @@ pub struct List { pub(crate) size: Size, selected_index: Option, right_clicked_index: Option, + reset_on_cancel: bool, _search_task: Task<()>, _load_more_task: Task<()>, _query_input_subscription: Subscription, @@ -191,6 +192,7 @@ where selectable: true, querying: false, size: Size::default(), + reset_on_cancel: true, _search_task: Task::ready(()), _load_more_task: Task::ready(()), _query_input_subscription, @@ -381,8 +383,15 @@ where } } + pub(crate) fn reset_on_cancel(mut self, reset: bool) -> Self { + self.reset_on_cancel = reset; + self + } + fn on_action_cancel(&mut self, _: &Cancel, window: &mut Window, cx: &mut Context) { - self.set_selected_index(None, window, cx); + if self.reset_on_cancel { + self.set_selected_index(None, window, cx); + } self.delegate.cancel(window, cx); cx.emit(ListEvent::Cancel); cx.notify();