diff options
| author | Danilo M. <danix@danix.xyz> | 2026-08-15 11:39:11 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-08-15 11:39:11 +0200 |
| commit | aecb22de0c6644380ea3b1e909c864fd24501dc7 (patch) | |
| tree | 646136145d61381248691b94c8b83615e42f6e61 /CHANGELOG.md | |
| parent | a15505d408895d53f2fb4321836931a1b0742b7d (diff) | |
| download | qtmaildir-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 'CHANGELOG.md')
| -rw-r--r-- | CHANGELOG.md | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b4df18..942fe41 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,10 +14,23 @@ point at which they are stable. ### Changed - The built-in filters carry icons, like the Save button at the other end of - the query row, with their text beside them. + the query row, with their text beside them. Important is a star, and Sent + uses the folder icon rather than the envelope-in-flight some themes lack. ### Fixed +- **`startup_query` can name a built-in filter**, and looks at both those and + your saved queries. In 0.21.0 it searched saved queries only, so a + `startup_query = Inbox` stopped matching once the duplicated Inbox entry was + removed from `queries.json`, and the application opened on whichever query + happened to be first in that file. A name matching nothing now falls back to + the Unread filter rather than to an arbitrary saved query, and a saved query + still wins a name collision with a filter. + + A `startup_query` naming a filter also **runs**. A filter composes its query + from your accounts rather than storing one, and the startup path read the + stored field directly, so it would have opened on an empty query bar. + - The flagged filter is labelled **Important**, matching the action of the same name. It shipped in 0.21.0 as "Flagged", which put the same tag under two names in one window. |
