From 3955ff80e3b0d558cd854c4517d1835514010b90 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Tue, 25 Aug 2026 18:11:25 +0200 Subject: feat: say which way the unread action will go, and hide it when it cannot Item 112, and 99 and 147 with it: the user's note is one design across all three. A union is not a state. ThreadSummary::tags is notmuch's union over the conversation, so a thread holding even one unread message answered "unread" and the thread toggle always chose "mark read". There was no input that reached "mark thread unread" on a mixed thread, which is the thread a user wants it for. The thread toggle becomes two absolute actions, mark_thread_read and mark_thread_unread. Neither takes a default chord, at the user's choice: Ctrl+Alt+U meant whichever direction the union picked, and since item 132 a shortcut is a chosen subset rather than a requirement. It is now unbound. The message-scoped toggle stays a toggle, because one message has a real two-valued state, and its label now names the direction it will go. On a selection with no single state the entry is hidden rather than labelled wrongly, chosen over disabling it; the thread submenu is the route then, and its entries are absolute. selectionTagPresence() is the three-valued predicate that needed to exist. everySelectedRowHasTag() delegates to it and keeps its two-valued answer, which is all a direction needs; a label needs the third value. The refresh is keyed on the model's dataChanged as well as on the selection, so a write moves the label without reselecting and none of the six optimistic-update call sites has to remember. Three mutations fail: restoring the union predicate reports the user's original symptom, showing the action on a mixed selection, and dropping the dataChanged refresh. The suite is 37 of 38, the failure being item 136 on an unrelated path. Four new strings translated, lrelease reports 0 unfinished. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01HFuRPtzFrSxCQjFk6tq7gD --- translations/qtmaildir_it_IT.ts | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) (limited to 'translations') diff --git a/translations/qtmaildir_it_IT.ts b/translations/qtmaildir_it_IT.ts index 913d151..a976f4e 100644 --- a/translations/qtmaildir_it_IT.ts +++ b/translations/qtmaildir_it_IT.ts @@ -498,6 +498,14 @@ Il messaggio È stato inviato. Non inviarlo di nuovo. Add or remove the deleted tag Aggiunge o rimuove l'etichetta deleted + + Mark thread &read + Segna conversazione come &letta + + + Remove the unread tag from every message of the selected threads + Rimuove il tag unread da ogni messaggio delle conversazioni selezionate + Re&ply Ris&pondi @@ -751,14 +759,18 @@ Il messaggio È stato inviato. Non inviarlo di nuovo. Mark thread spam Segna conversazione come spam - - Toggle the unread tag on whole threads - Inverte l'etichetta non letto su intere conversazioni - Mark thread read Segna conversazione come letta + + Mark thread &unread + Segna conversazione come &non letta + + + Add the unread tag to every message of the selected threads + Aggiunge il tag unread a ogni messaggio delle conversazioni selezionate + Mark thread unread Segna conversazione come non letta @@ -1164,6 +1176,22 @@ Il messaggio È stato inviato. Non inviarlo di nuovo. %1: %n conversazioni + + Mark as &read + Segna come &letto + + + Remove the unread tag from the selection + Rimuove il tag unread dalla selezione + + + Mark as &unread + Segna come &non letto + + + Add the unread tag to the selection + Aggiunge il tag unread alla selezione + 1 thread selected (%n message(s)) -- cgit v1.2.3