aboutsummaryrefslogtreecommitdiffstats
path: root/docs/superpowers/plans/2026-08-08-item-20-message-rows.md
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-08-23 20:39:17 +0200
committerDanilo M. <danix@danix.xyz>2026-08-23 20:39:17 +0200
commit0c6d43d62cae7815096919239b64891843864896 (patch)
tree7f93d3ffde71aba2296de2ecdb15a0d77b519baf /docs/superpowers/plans/2026-08-08-item-20-message-rows.md
parentf7948d98fe09c551856b04ba8a473dbd40649dc3 (diff)
downloadqtmaildir-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 'docs/superpowers/plans/2026-08-08-item-20-message-rows.md')
0 files changed, 0 insertions, 0 deletions