1
0
mirror of https://github.com/emilk/egui.git synced 2026-08-30 21:30:03 -04:00

Fix stuck menu when submenu vanishes (#7589)

* Closes https://github.com/rerun-io/rerun/issues/11301

This fixes a bug where a menu could get stuck, not closing at all, when
the currently open submenu stops being shown.
I also added a way to reproduce this to the demo, as well as a test
ensuring that there is no race condition in the fix.
This commit is contained in:
Lucas Meurer
2025-10-07 10:16:35 +02:00
committed by GitHub
parent f0faacc7d1
commit 65249013c4
4 changed files with 137 additions and 22 deletions

View File

@@ -20,6 +20,19 @@ pub struct PopupsDemo {
color: egui::Color32,
}
impl Default for PopupsDemo {
fn default() -> Self {
Self {
align4: RectAlign::default(),
gap: 4.0,
close_behavior: PopupCloseBehavior::CloseOnClick,
popup_open: false,
checked: true,
color: egui::Color32::RED,
}
}
}
impl PopupsDemo {
fn apply_options<'a>(&self, popup: Popup<'a>) -> Popup<'a> {
popup
@@ -95,6 +108,14 @@ impl PopupsDemo {
color_picker_color32(ui, &mut self.color, Alpha::Opaque);
});
if self.checked {
ui.menu_button("Only visible when checked", |ui| {
if ui.button("Remove myself").clicked() {
self.checked = false;
}
});
}
if ui.button("Open…").clicked() {
ui.close();
}
@@ -102,19 +123,6 @@ impl PopupsDemo {
}
}
impl Default for PopupsDemo {
fn default() -> Self {
Self {
align4: RectAlign::default(),
gap: 4.0,
close_behavior: PopupCloseBehavior::CloseOnClick,
popup_open: false,
checked: false,
color: egui::Color32::RED,
}
}
}
impl crate::Demo for PopupsDemo {
fn name(&self) -> &'static str {
"\u{2755} Popups"