diff options
| author | Danilo M. <danix@danix.xyz> | 2026-08-03 16:00:38 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-08-04 12:53:35 +0200 |
| commit | 98c1c615d147bfee3f17d4f420e1512af5a79436 (patch) | |
| tree | 82037d456544d6128324d85d5d572208f84c06a2 /tests/test_mimeparser.cpp | |
| parent | a5b2151ef4b602350bab6ecfcd05b4bae56fd6af (diff) | |
| download | qtmaildir-98c1c615d147bfee3f17d4f420e1512af5a79436.tar.gz qtmaildir-98c1c615d147bfee3f17d4f420e1512af5a79436.zip | |
feat: persist window, splitter and column widths
Resizing the window, the splitter or a thread-list column was undone by
the next launch. State now round-trips through a separate settings file
at ~/.local/state/qtmaildir/uistate.conf, written on close and read at
startup.
The state file is deliberately not the user's config: a base64 geometry
blob does not belong in a hand-edited file, and rewriting that file on
exit would drop its comments and key order, which QSettings does not
preserve.
Two details that are easy to get wrong:
QStandardPaths::StateLocation appends both the organization and the
application name, and both are "qtmaildir" here, so it resolves to
~/.local/state/qtmaildir/qtmaildir. The path is built from
GenericStateLocation instead, matching Config::defaultPath().
Restore runs after buildMenus() rather than at the end of buildUi():
QMainWindow::restoreState() matches toolbars by object name and silently
drops the position of one that does not exist yet.
Every restore is conditional on a non-empty blob, so a missing or
rejected state file leaves the built-in defaults instead of producing a
zero-size window.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Diffstat (limited to 'tests/test_mimeparser.cpp')
0 files changed, 0 insertions, 0 deletions
