mirror of
https://github.com/storytold/pdfcraft.git
synced 2026-10-24 10:08:00 -06:00
* fix(macos): Cmd+Q asks about unsaved changes (#1136) winit's default app menu sends Quit (Cmd+Q) straight to -[NSApplication terminate:], so PdfCraft quit without asking and unsaved edits were lost; the close button and Dock > Quit already ask. Install craft-quit's app menu (storytold/craft-libs#21) from the app creator. Its Quit sends ViewportCommand::Close, which guard_quit handles like the close button. If the menu can't be built, winit's menu stays and a warning is logged. craft-quit is pinned to the head of craft-libs#21 until #5 and #21 are merged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(macos): closing the window quits through terminate: (#1136) On Touch Bar Macs the close button crashed PdfCraft (exit 133, -[_NSTouchBarFinderObservation invalidate]): eframe drops the window inside AppKit's run loop. craft_quit::on_close_request, right after guard_quit in `logic`, cancels an allowed close and quits through -[NSApplication terminate:] instead. A close that guard_quit holds for the unsaved-changes prompt is left alone. Elsewhere it does nothing. craft-quit moves to the workspace dependencies, pinned to craft-libs main (f58bc1a, with #5 and #21 merged) instead of #21's head. The on_close_request change and its Touch Bar test are from jmacek. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Brandon Thomas <echelon@gmail.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
Brandon Thomas
parent
7461c29791
commit
41809cf765
@@ -29,6 +29,9 @@ log = { workspace = true }
|
||||
# crate registers the handler (Objective-C interop needs unsafe, which our workspace forbids)
|
||||
# behind a safe API. Same version as PhotoCraft. Pinned exactly: review the diff before bumping.
|
||||
fmv-macos-events = "=0.1.0"
|
||||
# ⌘Q asks about unsaved changes like the close button (#1136): an app menu whose Quit asks the
|
||||
# window to close instead of winit's, which ends the process without asking.
|
||||
craft-quit = { workspace = true, features = ["menu"] }
|
||||
|
||||
[target.'cfg(target_os = "linux")'.dependencies]
|
||||
# Asks the Wayland compositor which GPU it draws with (linux-dmabuf feedback), so the window is
|
||||
|
||||
@@ -379,6 +379,11 @@ fn app_creator<'a>(
|
||||
#[cfg(target_os = "macos")]
|
||||
{
|
||||
app.os_events = Some(apple_events.connect(&cc.egui_ctx));
|
||||
// winit's Quit (⌘Q) ends the process without asking about unsaved changes (#1136). This
|
||||
// menu's Quit closes the window instead, so `guard_quit` asks, as for the close button.
|
||||
if let Err(e) = craft_quit::install_app_menu(&cc.egui_ctx, "PdfCraft") {
|
||||
log::warn!("couldn't install the app menu, so ⌘Q quits without asking to save: {e}");
|
||||
}
|
||||
}
|
||||
if let Some(server) = instance {
|
||||
app.os_events = Some(server.connect(&cc.egui_ctx, native_wayland(cc)));
|
||||
|
||||
Reference in New Issue
Block a user