diff options
| author | Danilo M. <danix@danix.xyz> | 2026-08-23 20:39:17 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-08-23 20:39:17 +0200 |
| commit | 0c6d43d62cae7815096919239b64891843864896 (patch) | |
| tree | 7f93d3ffde71aba2296de2ecdb15a0d77b519baf /src/tagrules.cpp | |
| parent | f7948d98fe09c551856b04ba8a473dbd40649dc3 (diff) | |
| download | qtmaildir-0c6d43d62cae7815096919239b64891843864896.tar.gz qtmaildir-0c6d43d62cae7815096919239b64891843864896.zip | |
fix(compose): close every composer when the main window quits
A composer is deliberately parentless, so that it appears in the task
switcher and stays usable while the main window is. Qt therefore does not
take it down with that window, and being a live top-level it kept the process
alive: the main window vanished, the composer stayed on screen with nothing
behind it, and closing it then raised the unsaved-edits dialog for a session
the user had already ended.
The quit path already ASKED about those edits and saved them. What it never
did was close the windows afterwards.
Closing rather than deleting: WA_DeleteOnClose is set on every composer, so
close() is what frees them, and it lets ComposeWindow::closeEvent() run its
own draft handling on the way out. Iterating a copy of the list, since
closing runs the `closed` handler and that mutates m_composers.
Placed last, after every route that turns back has returned: reaching it means
the application really is quitting.
The test opens TWO composers, so a fix that closed only the last one cannot
pass it. Mutation-checked by removing the loop.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q2koFevoSxTLhfexJTZWQd
Diffstat (limited to 'src/tagrules.cpp')
0 files changed, 0 insertions, 0 deletions
