summaryrefslogtreecommitdiffstats
path: root/src/mainwindow.h
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-08-15 11:39:11 +0200
committerDanilo M. <danix@danix.xyz>2026-08-15 11:39:11 +0200
commitaecb22de0c6644380ea3b1e909c864fd24501dc7 (patch)
tree646136145d61381248691b94c8b83615e42f6e61 /src/mainwindow.h
parenta15505d408895d53f2fb4321836931a1b0742b7d (diff)
downloadqtmaildir-aecb22de0c6644380ea3b1e909c864fd24501dc7.tar.gz
qtmaildir-aecb22de0c6644380ea3b1e909c864fd24501dc7.zip
fix(startup): let startup_query name a built-in filter, and run it
Two defects, both reachable only after item 93. startupSavedQuery() searched the saved queries alone, so a startup_query of "Inbox" matched nothing once Inbox shipped as a built-in filter and the duplicated entry was removed from queries.json. It then fell back to m_savedQueries.first(), which is an arbitrary choice that used to look reasonable while every install carried an Inbox entry: with the duplicates gone it opened on a leftover search for one sender, and an empty queries.json opened on nothing at all. The search now covers the saved queries first, so the user's own entry wins a name collision, then the built-in filters; the fallback is the Unread filter, which is always present. The default startup name has always been "Unread" and now resolves for the first time: before this it named nothing unless the user happened to have such an entry. The constructor also read startup.query directly, and a generated entry stores no query at all, so even a matching filter opened an empty bar. It resolves through Config::resolvedQuery() now, unscoped, since the account dropdown starts on "All accounts". Icons per the user's choices: a star for Important rather than the flag action's own icon, since on the query row an icon reads as a category rather than as an instruction, and mail-folder-sent rather than mail-sent. Three tests changed rather than adapted, because their premises were the defect. Two asserted the first-saved-query fallback. aCronSyncDoesNotRefreshBeforeAnyQueryHasRun assumed a fresh window had run no query, which is no longer true; it is now aCronSyncRefreshesTheLastRunQueryNotTheQueryBar and asserts the property that actually matters on a cron timer, through a new lastRunQueryForTesting() seam, since a legitimate refresh bumps the generation and the counter cannot tell the two apart.
Diffstat (limited to 'src/mainwindow.h')
-rw-r--r--src/mainwindow.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/mainwindow.h b/src/mainwindow.h
index bb1ba75..03f21bb 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -186,6 +186,14 @@ public:
/// stale, so a test standing in for the worker has to know the current one.
quint64 currentGenerationForTesting() const { return m_generation; }
+ /// The query the visible list was actually built from.
+ ///
+ /// A test seam: a refresh re-runs THIS, never the text in the query bar,
+ /// and the difference is only observable through the value itself. The
+ /// generation counter cannot stand in for it, since a legitimate refresh
+ /// bumps the generation too.
+ QString lastRunQueryForTesting() const { return m_lastQuery; }
+
/// Puts the window into the state refreshCurrentQuery() leaves it in, and
/// returns the generation the refresh's replies must carry.
///