[Afsluiten][P1] macOS: Cmd+Q, Dock-Stop en uitloggen slaan de sluitbewaking over — geen vraag over niet-opgeslagen werk, opname en call niet afgerond #2678
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
release-blocker
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#2678
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Symptoom
Op macOS sluit Cmd+Q de app meteen af — net als OciDeck → Stop OciDeck, Dock → Stop en uitloggen/herstarten. De vraag "Er zijn bestanden met niet-opgeslagen wijzigingen…" verschijnt niet; via de rode sluitknop verschijnt hij wél. De opruimstappen draaien evenmin:
stopRecordingBeforeQuit);leaveMeetingBeforeQuit);Het werk zelf is via de herstelbestanden bij de volgende start nog terug te halen. Maar de gebruiker krijgt de keuze niet, en een opname of call eindigt als een harde kill.
Oorzaak
PlatformProvidedMenuItem(type: quit)(lib/widgets/shell/app_menu_bar.dart:220). Dat roeptNSApplication.terminate:aan, en die route komt niet langs de willClose-hook van het venster (lib/platform/native_window_io.dart:29-31). Aan die hook hangtAppShell._onWillClose→_handleClose→_destroy(lib/widgets/app_shell.dart:476-530).System.requestAppExit). De enige luisteraar (lib/main.dart:158-171) rondt alleen het log af en antwoordtAppExitResponse.exit. Het commentaar daar zegt het al: "Het antwoord blijft wat het zonder deze luisteraar ook was".Voorgestelde oplossing
main.dart.AppShellregistreert een exit-handler, op dezelfde manier alssetWillCloseCallback. Die handler start_handleClose()en geeftAppExitResponse.cancelterug. Kiest de gebruiker Doorgaan, dan eindigt_handleClosetoch al inquitApp(). Bij Annuleren blijft de app open.exitgelden._closeInProgressal af.cancelhet systeem melden dat OciDeck het tegenhoudt. Dat is het gewenste gedrag bij niet-opgeslagen werk; TextEdit en Pages doen hetzelfde.Wat overeind moet blijven
quitApproeptcloseLogaan.main.dart).Toets
tester.binding.handleRequestAppExit()geeftcancelen de opslaan-dialoog verschijnt. Zonder vuil tabblad loopt het via_destroynaarquitApp.Gevonden bij codelezing tijdens de vervolginspectie van 31-10-2026. Nog niet in de draaiende app nagespeeld.
Opgepakt. Tak: fix/vervolginspectie-3110. Verwachte reikwijdte: de bestanden die in de oorzaak van dit issue staan, plus een regressietest.
Opgepakt. Tak: fix/vervolginspectie-3110. Verwachte reikwijdte: lib/main.dart, lib/widgets/app_shell.dart, lib/platform/macos_quit.dart, lib/platform/native_window_io.dart, test/macos_quit_guard_test.dart.
Staat op main in
a6b4dc066(1ec8ce0a3). Cmd+Q loopt via System.requestAppExit en de sluitbewaking in lib/widgets/shell/macos_exit_guard.dart. Zonder de shell sluit de app nog steeds meteen. De toets speelt het verzoek na via handleRequestAppExit, niet met een echte Cmd+Q in de draaiende app.Opgelost op main in
a6b4dc066. De zin „Op macOS sluit Cmd+Q de app meteen af“ is gedekt door lib/widgets/shell/macos_exit_guard.dart: de shell annuleert het afsluitverzoek en start dezelfde sluitbewaking als de vensterknop. Niet meegenomen: Cmd+Q is niet met de hand in de draaiende app nagespeeld; de widgettoets dekt handleRequestAppExit.