diff --git a/src/widget/context_menu.rs b/src/widget/context_menu.rs index 87e3ebed..2aa0d118 100644 --- a/src/widget/context_menu.rs +++ b/src/widget/context_menu.rs @@ -115,16 +115,12 @@ impl ContextMenu<'_, Message> { shell.publish(self.on_surface_action.as_ref().unwrap()(destroy_popup(id))); state.view_cursor = view_cursor; - ( - id, - layout.children().map(|lo| lo.bounds()).collect::>(), - ) - } else { - ( - window::Id::unique(), - layout.children().map(|lo| lo.bounds()).collect(), - ) } + // A fresh id per popup, so the old popup's Done cannot be mistaken for the new one's + ( + window::Id::unique(), + layout.children().map(|lo| lo.bounds()).collect::>(), + ) }); let Some(context_menu) = self.context_menu.as_mut() else { return; diff --git a/src/widget/menu/menu_bar.rs b/src/widget/menu/menu_bar.rs index 14766603..88727818 100644 --- a/src/widget/menu/menu_bar.rs +++ b/src/widget/menu/menu_bar.rs @@ -389,13 +389,12 @@ where state.active_root.clear(); shell.publish(surface_action(destroy_popup(id))); state.view_cursor = view_cursor; - (id, layout.children().map(|lo| lo.bounds()).collect()) - } else { - ( - window::Id::unique(), - layout.children().map(|lo| lo.bounds()).collect(), - ) } + // A fresh id per popup, so the old popup's Done cannot be mistaken for the new one's + ( + window::Id::unique(), + layout.children().map(|lo| lo.bounds()).collect(), + ) }); let mut popup_menu: Menu<'static, _> = Menu { diff --git a/src/widget/segmented_button/widget.rs b/src/widget/segmented_button/widget.rs index a2f5e19c..9c41b89c 100644 --- a/src/widget/segmented_button/widget.rs +++ b/src/widget/segmented_button/widget.rs @@ -938,10 +938,9 @@ where state.active_root.clear(); shell.publish(surface_action(destroy_popup(id))); state.view_cursor = view_cursor; - id - } else { - window::Id::unique() } + // A fresh id per popup, so the old popup's Done cannot be mistaken for the new one's + window::Id::unique() }); let Some(entity) = state.show_context else { return;