From 8aaeb9383d0d751f8b3e2d13de016f0c107f139d Mon Sep 17 00:00:00 2001 From: Jason Lee Date: Mon, 29 Jul 2024 19:00:17 +0800 Subject: [PATCH] Fix dropdown click to lose focus. (#80) --- crates/story/src/lib.rs | 2 +- crates/ui/src/dropdown.rs | 10 ++++------ crates/ui/src/list/list.rs | 1 + crates/ui/src/popover.rs | 2 ++ crates/ui/src/switch.rs | 1 + crates/ui/src/table.rs | 1 + 6 files changed, 10 insertions(+), 7 deletions(-) diff --git a/crates/story/src/lib.rs b/crates/story/src/lib.rs index ace96f59..541c1bf3 100644 --- a/crates/story/src/lib.rs +++ b/crates/story/src/lib.rs @@ -306,7 +306,7 @@ impl FocusableView for MyPanel { } } impl Render for MyPanel { - fn render(&mut self, _cx: &mut ViewContext) -> impl IntoElement { + fn render(&mut self, _: &mut ViewContext) -> impl IntoElement { div().id("my-panel").size_full().child(self.view.clone()) } } diff --git a/crates/ui/src/dropdown.rs b/crates/ui/src/dropdown.rs index f8806c45..30e71f9e 100644 --- a/crates/ui/src/dropdown.rs +++ b/crates/ui/src/dropdown.rs @@ -432,7 +432,6 @@ where div() .id(self.id.clone()) .key_context("Dropdown") - .group(format!("dropdown-group:{}", self.id)) .track_focus(&self.focus_handle) .on_action(cx.listener(Self::up)) .on_action(cx.listener(Self::down)) @@ -440,11 +439,10 @@ where .on_action(cx.listener(Self::escape)) .size_full() .relative() + .input_text_size(self.size) .child( div() - .id(ElementId::Name( - format!("dropdown-input:{}", self.id).into(), - )) + .id("dropdown-input") .relative() .flex() .w_full() @@ -468,7 +466,7 @@ where .child(div().flex_1().child(self.display_title(cx))) .when(show_clean, |this| { this.child( - Button::new("clean-text", cx) + Button::new("clean", cx) .icon(IconName::Close) .style(ButtonStyle::Ghost) .size(px(14.)) @@ -485,7 +483,7 @@ where ), ) .child(DropdownMenuElement { - id: ElementId::Name(format!("dropdown-menu:{}", self.id).into()), + id: "dropdown-menu".into(), dropdown: cx.view().clone(), }) } diff --git a/crates/ui/src/list/list.rs b/crates/ui/src/list/list.rs index cbc26f93..bf2b7793 100644 --- a/crates/ui/src/list/list.rs +++ b/crates/ui/src/list/list.rs @@ -351,6 +351,7 @@ where .on_mouse_down( MouseButton::Left, cx.listener(move |this, _, cx| { + cx.stop_propagation(); this.selected_index = Some(ix); this.action_confirm(&Confirm, cx); }), diff --git a/crates/ui/src/popover.rs b/crates/ui/src/popover.rs index 330c3d64..6f4e9949 100644 --- a/crates/ui/src/popover.rs +++ b/crates/ui/src/popover.rs @@ -632,6 +632,8 @@ where .on_mouse_down( gpui::MouseButton::Left, cx.listener(|_, _, cx| { + cx.stop_propagation(); + PopoverWindowState::close_window(cx); }), ), diff --git a/crates/ui/src/switch.rs b/crates/ui/src/switch.rs index b79a75a8..a1152f3a 100644 --- a/crates/ui/src/switch.rs +++ b/crates/ui/src/switch.rs @@ -140,6 +140,7 @@ impl RenderOnce for Switch { self.on_click.filter(|_| !self.disabled), |this, on_click| { this.on_mouse_down(gpui::MouseButton::Left, move |_, cx| { + cx.stop_propagation(); on_click(&!self.checked, cx); }) }, diff --git a/crates/ui/src/table.rs b/crates/ui/src/table.rs index a20703f5..3272a626 100644 --- a/crates/ui/src/table.rs +++ b/crates/ui/src/table.rs @@ -550,6 +550,7 @@ where .on_mouse_down( MouseButton::Left, cx.listener(move |this, _, cx| { + cx.stop_propagation(); this.on_col_head_click(col_ix, cx); }), )