mirror of
https://github.com/storytold/pdfcraft.git
synced 2026-10-25 10:50:14 +00:00
fdba8c679a
Every remaining rfd::FileDialog (26 call sites) ran -[NSSavePanel runModal] inside winit's event handler, which aborts the app when the window gets an event while the panel is open. They all go through pickers::ask now: an rfd::AsyncFileDialog, with the follow-up run as a closure on a later frame. - One picker at a time, held until its closure starts, so a closure that asks again (merge data, run action) gets its picker; refusals are told. - Closures run inside pdfcraft_engine::guard, as commands do. - Targets drop a pick if the document is no longer active or was edited. - Save-on-close closes only once written; CloseRequest::Tab holds a DocId. - Extract+delete deletes only after writing, and only if unedited. - Signing happens once the path is chosen, on an unchanged document. - Browse… results land only in the same showing of the dialog. - Sign, print-to-PDF and attachment saves write atomically. Co-authored-by: Hal Goff <hal@hg.studio> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Brandon Thomas <echelon@gmail.com>