From fbb74339da4a632609e68ce294e0b8f1be323d31 Mon Sep 17 00:00:00 2001 From: pravdomil <2387356+pravdomil@users.noreply.github.com> Date: Mon, 12 Oct 2026 15:07:05 +0200 Subject: [PATCH] GPU Information: Enter presses OK The message box's only button is OK, the default; Enter now dismisses it (back to Settings when opened from there), as Escape already does. Co-Authored-By: Claude Opus 5.5 --- crates/ui-egui/src/panels/forms.rs | 3 ++- crates/ui-egui/tests/ui_settings_info.rs | 31 ++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/crates/ui-egui/src/panels/forms.rs b/crates/ui-egui/src/panels/forms.rs index 2193b605..5099cc4b 100644 --- a/crates/ui-egui/src/panels/forms.rs +++ b/crates/ui-egui/src/panels/forms.rs @@ -905,7 +905,8 @@ pub(crate) fn close_info(app: &mut EffectcraftApp) { pub fn show_info(app: &mut EffectcraftApp, ctx: &egui::Context, t: &Tokens) { let (title, body) = app.dialog_state.info.clone(); - let mut close = false; + // Enter presses OK, the default (and only) button. + let mut close = !ctx.egui_wants_keyboard_input() && ctx.input_mut(|i| i.consume_key(egui::Modifiers::NONE, egui::Key::Enter)); // The text wraps within this small dialog; avoid a horizontal scrollbar changing its height. super::dialogs::modal_vertical(ctx, &title, vec2(440.0, 160.0), t, |ui| { ui.label(tr(&body)); diff --git a/crates/ui-egui/tests/ui_settings_info.rs b/crates/ui-egui/tests/ui_settings_info.rs index 9d87eb04..955a709b 100644 --- a/crates/ui-egui/tests/ui_settings_info.rs +++ b/crates/ui-egui/tests/ui_settings_info.rs @@ -154,3 +154,34 @@ fn gpu_information_dialog_stays_in_place() { assert!((current.min - start.min).length() < 1.0, "GPU Information dialog moved"); } } + +/// Enter presses OK, the dialog's default button: back to Settings when it was opened from +/// there, closed otherwise. +#[test] +fn gpu_information_enter_presses_ok() { + let mut session = Session::default(); + session.execute("comp.new", json!({"width":32,"height":32,"duration":2})).unwrap(); + let mut h = Harness::builder().with_size(vec2(1600.0, 1000.0)).build_eframe(|_| EffectcraftApp::new(session)); + h.run_steps(4); + let enter = |h: &mut Harness<'_, EffectcraftApp>| { + for pressed in [true, false] { + h.event(Event::Key { key: Key::Enter, physical_key: Some(Key::Enter), pressed, repeat: false, modifiers: Modifiers::NONE }); + h.step(); + } + h.run_steps(3); + }; + let ctx = h.ctx.clone(); + menus::invoke(h.state_mut(), &ctx, "app.gpuInfo", json!({})).unwrap(); + h.run_steps(3); + assert_eq!(h.state().dialog, Some(Dialog::Info)); + enter(&mut h); + assert!(h.state().dialog.is_none(), "Enter closed GPU Information"); + + menus::invoke(h.state_mut(), &ctx, "app.settings", json!({"page":"previews"})).unwrap(); + h.run_steps(3); + let at = rect(&h, "settings.button.GPU Information").center(); + click(&mut h, at); + assert_eq!(h.state().dialog, Some(Dialog::Info)); + enter(&mut h); + assert_eq!(h.state().dialog, Some(Dialog::Settings), "Enter returned to the pending Settings transaction"); +}