From eef8abaa15620aeabf13b22a5e01d47ea1fd31f2 Mon Sep 17 00:00:00 2001 From: Jason Lee Date: Tue, 11 Nov 2025 18:41:23 +0800 Subject: [PATCH] popover: Fix #1545 incorrect to sync on_open_change to state. (#1557) --- crates/ui/src/popover.rs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/crates/ui/src/popover.rs b/crates/ui/src/popover.rs index 7432cccb..8c7fa85c 100644 --- a/crates/ui/src/popover.rs +++ b/crates/ui/src/popover.rs @@ -278,19 +278,20 @@ impl RenderOnce for Popover { fn render(self, window: &mut Window, cx: &mut App) -> impl IntoElement { let force_open = self.open; let default_open = self.default_open; + let tracked_focus_handle = self.tracked_focus_handle.clone(); let state = window.use_keyed_state(self.id.clone(), cx, |_, cx| { PopoverState::new(default_open, cx) }); - if let Some(tracked_focus_handle) = self.tracked_focus_handle.clone() { - state.update(cx, |state, _| { - state.tracked_focus_handle = Some(tracked_focus_handle); - state.on_open_change = self.on_open_change.clone(); - if let Some(force_open) = force_open { - state.open = force_open; - } - }) - } + state.update(cx, |state, _| { + if let Some(tracked_focus_handle) = tracked_focus_handle { + state.tracked_focus_handle = Some(tracked_focus_handle); + } + state.on_open_change = self.on_open_change.clone(); + if let Some(force_open) = force_open { + state.open = force_open; + } + }); let open = state.read(cx).open; let focus_handle = state.read(cx).focus_handle.clone();