From 9bec59c98a9f00e6e7f2c0181659a7639bc04e72 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Fri, 28 Aug 2026 11:26:41 +0200 Subject: feat: let a row say whether it is a conversation One predicate for the question every scope, label and membership decision in item 177 keys on. It repeats hasChildren()'s rule deliberately: an expander and a conversation are the same fact, including that a loaded thread trusts its children over a count that included duplicates. --- src/threadlistmodel.h | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/threadlistmodel.h') diff --git a/src/threadlistmodel.h b/src/threadlistmodel.h index 4af09d8..d1baae1 100644 --- a/src/threadlistmodel.h +++ b/src/threadlistmodel.h @@ -324,6 +324,14 @@ public: /// True when the index is a message row rather than a thread root. bool isMessageRow(const QModelIndex &index) const; + /// Whether this row stands for a CONVERSATION rather than for one message. + /// + /// The single question every scope, label and membership decision keys on + /// (item 177). A row with replies is the conversation; a row without them + /// is its message and behaves as it always has. A message row is never + /// either, so the answer is false there rather than undefined. + bool isConversationRow(const QModelIndex &index) const; + /// The message row's node, or a default-constructed one for any index that /// is not a message row. MessageNode messageAt(const QModelIndex &index) const; -- cgit v1.2.3