diff options
| author | Danilo M. <danix@danix.xyz> | 2026-08-14 19:38:59 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-08-14 19:38:59 +0200 |
| commit | 66f1159136de5e2f032ddc83b5b4b4bde2659291 (patch) | |
| tree | 4252a7123516593e65ca9ac85b0b74e63b6195c0 /tests/test_messageview.cpp | |
| parent | f6658a12c85edec13890cfc1409d2f604730292d (diff) | |
| download | qtmaildir-66f1159136de5e2f032ddc83b5b4b4bde2659291.tar.gz qtmaildir-66f1159136de5e2f032ddc83b5b4b4bde2659291.zip | |
fix(read): auto mark-read touches only the message on screen
Reported by the user: selecting an unexpanded thread root marked every
message in the thread read, replies included. maildir.synchronize_flags
is on, so removing `unread` rewrites Maildir filenames and the next sync
carries it to the server: mail the user never saw stops being unread
everywhere.
This was coherent while a root click rendered the whole conversation,
because everything marked read had been displayed. Removing that view
made a root render one message and left the thread-wide write in place,
so the defect arrived with the previous commit.
markCurrentThreadRead now sends m_currentMessageId, which is what the
pane rendered, through sendMessageTagChange. The thread-level `unread`
guard is dropped with it: a thread carries `unread` while ANY message in
it is unread, so it would pass a read root under unread replies and send
a write for a message already read. Scheduling still checks it, which
keeps a fully-read thread from arming a timer.
The test asserts on which worker entry point the window used, because
reading tags back cannot answer this. Three earlier versions passed
against the unfixed code: TagsRole is empty for a message row by design,
MessageOwnTagsRole subtracts thread tags and drops marks so it can never
hold `unread`, and raw node tags are not refreshed until onTagsApplied
confirms, which lands after the assertion. Mutation checked.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Diffstat (limited to 'tests/test_messageview.cpp')
0 files changed, 0 insertions, 0 deletions
