diff options
| author | Danilo M. <danix@danix.xyz> | 2026-08-10 09:30:37 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-08-10 09:30:37 +0200 |
| commit | e1dba2987a9a1e87b92801959df9c9d4f1375d2f (patch) | |
| tree | 25718fd36e87eac721f41b02cca46b6fb07e94d9 /src/cardlayout.cpp | |
| parent | 93e6a533f4b0cc1a75000b2f8c77181dfc56e199 (diff) | |
| download | qtmaildir-e1dba2987a9a1e87b92801959df9c9d4f1375d2f.tar.gz qtmaildir-e1dba2987a9a1e87b92801959df9c9d4f1375d2f.zip | |
fix(view): indent a flat thread's replies like any other
A reply in a thread with no usable In-Reply-To carries depth 0, because that is
how notmuch reports every message of such a thread. CardLayout read depth 0 as
"not nested", so those replies drew flush against their own thread with no
spine, while a nested thread's replies indented normally: the list showed two
different shapes for the same relationship, side by side.
A MESSAGE row is nested at least one level whatever depth it reports. Being a
child row IS the nesting; the depth only says how much further to go.
This is the third fault from the same root. The depth numbering was trusted to
mean structure when it only ever meant "how notmuch happened to thread this":
first it hid a flat thread's replies entirely, then it left the first message
unreachable, and now it drew the survivors without their indent.
Diffstat (limited to 'src/cardlayout.cpp')
| -rw-r--r-- | src/cardlayout.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/cardlayout.cpp b/src/cardlayout.cpp index 0e118ab..f542df0 100644 --- a/src/cardlayout.cpp +++ b/src/cardlayout.cpp @@ -103,7 +103,17 @@ CardLayout CardLayout::compute(const Input &input, const QRect &rect, // Indent, capped. qMin rather than a branch so depth 5 and depth 50 land // in exactly the same place. - const int depth = qMin(input.depth, kMaxDepth); + // + // A MESSAGE row is nested at least one level whatever depth it reports. + // notmuch numbers every message of a thread with no usable In-Reply-To as + // depth 0, so a flat thread's replies arrived here claiming no nesting and + // drew flush against their own thread with no spine, while a nested + // thread's replies indented normally: two different shapes on screen for + // the same relationship. Being a child row IS the nesting; the depth only + // says how much further to go. + const int effectiveDepth = + input.isMessage ? qMax(1, input.depth) : input.depth; + const int depth = qMin(effectiveDepth, kMaxDepth); const int indent = depth * kIndentStep; out.contentLeft = textLeft + kPaddingX + indent; |
