From d95cbabcc35dfae2d48327dcf35693784944d7a5 Mon Sep 17 00:00:00 2001 From: Floyd Wang Date: Tue, 11 Feb 2025 18:54:52 +0800 Subject: [PATCH] dropdown: Do not reset the selected index when cancelling (#618) ## Before https://github.com/user-attachments/assets/e33c2324-94f0-42b0-99cc-9e2dcdee3f3d ## After https://github.com/user-attachments/assets/7c5c6fee-b0f6-4cd5-986e-ea8f6f0e7f9d --- crates/ui/src/dropdown.rs | 4 +++- crates/ui/src/list/list.rs | 11 ++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) 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();