diff options
| author | _ov4 <ov4@ov4.org> | 2026-10-22 02:53:04 +0000 |
|---|---|---|
| committer | _ov4 <ov4@ov4.org> | 2026-10-22 02:53:04 +0000 |
| commit | 21eb7861f1ca534b39b81a08a49c843c29ee48b6 (patch) | |
| tree | 406de8332f199b3a50680a329e5eff48c10daaae /bundle/src-tauri/src | |
| parent | 68d939ad652c7fca7fe7de7b55e51e0f34374f19 (diff) | |
fix(bundle): ask about unsaved changes when quitting with Cmd+Q
The predefined macOS Quit terminated the app without closing its
windows, so their unsaved-changes prompts never ran. Quit now closes
every window and the app exits after the last one.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'bundle/src-tauri/src')
| -rw-r--r-- | bundle/src-tauri/src/main.rs | 11 | ||||
| -rw-r--r-- | bundle/src-tauri/src/menu.rs | 6 |
2 files changed, 9 insertions, 8 deletions
diff --git a/bundle/src-tauri/src/main.rs b/bundle/src-tauri/src/main.rs index 9f63fc5..0da6815 100644 --- a/bundle/src-tauri/src/main.rs +++ b/bundle/src-tauri/src/main.rs @@ -93,11 +93,12 @@ fn main() { .menu(menu::build) // Menu items act on the focused window, like its keyboard shortcuts. .on_menu_event(|app, event| { - let focused = app - .webview_windows() - .into_values() - .find(|window| window.is_focused().unwrap_or(false)); - if let Some(window) = focused { + let mut windows = app.webview_windows().into_values(); + if event.id() == "quit" { + // Each window runs its unsaved-changes prompt; the app exits after the last. + windows.for_each(|window| drop(window.close())); + } else if let Some(window) = windows.find(|window| window.is_focused().unwrap_or(false)) + { let _ = window.emit_to(window.label(), "menu", event.id().as_ref()); } }) diff --git a/bundle/src-tauri/src/menu.rs b/bundle/src-tauri/src/menu.rs index ab2dd32..dad3779 100644 --- a/bundle/src-tauri/src/menu.rs +++ b/bundle/src-tauri/src/menu.rs @@ -39,8 +39,8 @@ pub fn build<R: Runtime>(app: &AppHandle<R>) -> tauri::Result<Menu<R>> { .maximize() .build()?; let menu = MenuBuilder::new(app); - // macOS shows the first submenu as the application menu. Quit skips unsaved-changes - // prompts, so other platforms close windows instead. + // macOS shows the first submenu as the application menu. The predefined Quit terminates + // without closing windows, skipping their unsaved-changes prompts, so "quit" closes them. #[cfg(target_os = "macos")] let menu = menu.item( &SubmenuBuilder::new(app, "CPSC Bundle") @@ -52,7 +52,7 @@ pub fn build<R: Runtime>(app: &AppHandle<R>) -> tauri::Result<Menu<R>> { .hide_others() .show_all() .separator() - .quit() + .item(&item("quit", "Quit CPSC Bundle", "CmdOrCtrl+Q")?) .build()?, ); menu.items(&[&file, &edit, &run, &window]).build() |
