diff options
| author | Danilo M. <danix@danix.xyz> | 2026-08-28 17:33:31 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-08-28 17:33:31 +0200 |
| commit | f934029d3333396bde6ec306ab300641929c7cdc (patch) | |
| tree | a7384e7569c4d102f489666752b036969751bdb9 /docs/RELEASING.md | |
| parent | ac9a0718d9f071b601cd678485a25b416cf5af44 (diff) | |
| download | qtmaildir-f934029d3333396bde6ec306ab300641929c7cdc.tar.gz qtmaildir-f934029d3333396bde6ec306ab300641929c7cdc.zip | |
feat: treat a mixed conversation's unread state as unread
Item 112 hid the toggle whenever the selection disagreed, because a union
is not a state and no honest label existed for it. That was affordable
because the "Whole thread" submenu sat beside it carrying two absolute
entries, which worked whatever the mix.
Item 177 deletes that submenu: the row decides the scope, so a second set
of actions is a second answer to a settled question. Hiding the toggle
then leaves the commonest conversation in the mailbox with no key at all.
The rule is a catch-all instead. Any unread message, a mixed conversation
included, reads "Mark thread as read" and marks every message read; only a
fully read selection reads "Mark thread as unread". Two presses therefore
reach either state from anywhere, which is what makes one key enough.
The write direction moves with the label. Computing it from
everySelectedRowHasTag() while the label promised "read" would mark a
mixed conversation unread, which is the item 112 report happening again
from the other end; the mutation putting that back fails the new test.
The three-valued selectionTagPresence() is unchanged and still asked, since
Every and Mixed differ for other callers. Only this label collapses them.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PEK9z5D3oa1nVmJ6xpQhBs
Diffstat (limited to 'docs/RELEASING.md')
0 files changed, 0 insertions, 0 deletions
