From 059909fb0597ba0753215aa82b9167a8b273dfc1 Mon Sep 17 00:00:00 2001 From: bherbruck Date: Wed, 7 Oct 2026 19:46:30 +0000 Subject: [PATCH] Fix: File menu closed on the same click that opened it Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01AS5Tn3xieewUSg3uxrMVdL --- crates/ui-egui/src/toolbar.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/crates/ui-egui/src/toolbar.rs b/crates/ui-egui/src/toolbar.rs index cda5e8f5..84a1d6bb 100644 --- a/crates/ui-egui/src/toolbar.rs +++ b/crates/ui-egui/src/toolbar.rs @@ -78,7 +78,15 @@ pub fn app_bar(app: &mut SolveApp, ui: &mut egui::Ui) { } if file { app.ui.palette_open = false; - ui.ctx().data_mut(|d| d.insert_temp(egui::Id::new("sc_file_menu"), true)); + let ctx = ui.ctx().clone(); + let open = ctx.data(|d| d.get_temp::(egui::Id::new("sc_file_menu")).unwrap_or(false)); + let pass = ctx.cumulative_pass_nr(); + // The folder button toggles the menu. Remember the pass it opened on so the same + // click isn't also treated as a click outside the menu (which would close it at once). + ctx.data_mut(|d| { + d.insert_temp(egui::Id::new("sc_file_menu"), !open); + d.insert_temp(egui::Id::new("sc_file_menu_opened"), pass); + }); } // Document tab. let name = format!("{}{}", app.session.doc.name, if app.session.is_dirty() { " •" } else { "" }); @@ -147,7 +155,8 @@ fn file_menu(app: &mut SolveApp, ctx: &egui::Context) { } }); }); - if close || resp.response.clicked_elsewhere() { + let just_opened = ctx.data(|d| d.get_temp::(egui::Id::new("sc_file_menu_opened"))) == Some(ctx.cumulative_pass_nr()); + if close || (!just_opened && resp.response.clicked_elsewhere()) { ctx.data_mut(|d| d.insert_temp(id, false)); } }