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
This commit is contained in:
parent
0050685a58
commit
d95cbabcc3
2 changed files with 13 additions and 2 deletions
|
|
@ -347,7 +347,9 @@ where
|
||||||
let searchable = delegate.delegate.can_search();
|
let searchable = delegate.delegate.can_search();
|
||||||
|
|
||||||
let list = cx.new(|cx| {
|
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 {
|
if !searchable {
|
||||||
list = list.no_query();
|
list = list.no_query();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -156,6 +156,7 @@ pub struct List<D: ListDelegate> {
|
||||||
pub(crate) size: Size,
|
pub(crate) size: Size,
|
||||||
selected_index: Option<usize>,
|
selected_index: Option<usize>,
|
||||||
right_clicked_index: Option<usize>,
|
right_clicked_index: Option<usize>,
|
||||||
|
reset_on_cancel: bool,
|
||||||
_search_task: Task<()>,
|
_search_task: Task<()>,
|
||||||
_load_more_task: Task<()>,
|
_load_more_task: Task<()>,
|
||||||
_query_input_subscription: Subscription,
|
_query_input_subscription: Subscription,
|
||||||
|
|
@ -191,6 +192,7 @@ where
|
||||||
selectable: true,
|
selectable: true,
|
||||||
querying: false,
|
querying: false,
|
||||||
size: Size::default(),
|
size: Size::default(),
|
||||||
|
reset_on_cancel: true,
|
||||||
_search_task: Task::ready(()),
|
_search_task: Task::ready(()),
|
||||||
_load_more_task: Task::ready(()),
|
_load_more_task: Task::ready(()),
|
||||||
_query_input_subscription,
|
_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>) {
|
fn on_action_cancel(&mut self, _: &Cancel, window: &mut Window, cx: &mut Context<Self>) {
|
||||||
self.set_selected_index(None, window, cx);
|
if self.reset_on_cancel {
|
||||||
|
self.set_selected_index(None, window, cx);
|
||||||
|
}
|
||||||
self.delegate.cancel(window, cx);
|
self.delegate.cancel(window, cx);
|
||||||
cx.emit(ListEvent::Cancel);
|
cx.emit(ListEvent::Cancel);
|
||||||
cx.notify();
|
cx.notify();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue