diff options
| -rw-r--r-- | CHANGELOG.md | 6 | ||||
| -rw-r--r-- | docs/superpowers/plans/2026-08-03-post-0.1.0-usability.md | 64 | ||||
| -rw-r--r-- | src/mainwindow.cpp | 2 |
3 files changed, 71 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c9c7d2..13e2c39 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,12 @@ point at which they are stable. ## [Unreleased] +### Changed + +- The Sync button carries the refresh icon instead of a mailbox one. With the + toolbar following the desktop's "icon only" style, the icon is the whole + control, and a mailbox glyph read as "mail" rather than "fetch again". + ## [0.14.0] - 2026-08-10 The thread list stops going stale. A sync running in the background now diff --git a/docs/superpowers/plans/2026-08-03-post-0.1.0-usability.md b/docs/superpowers/plans/2026-08-03-post-0.1.0-usability.md index dccea2d..ff6efc4 100644 --- a/docs/superpowers/plans/2026-08-03-post-0.1.0-usability.md +++ b/docs/superpowers/plans/2026-08-03-post-0.1.0-usability.md @@ -120,6 +120,8 @@ taking that too literally. | 61 | `test_mainwindow` fails intermittently, about 1 run in 20 | testing | S | open; predates the card list, reproduced on f72dba9 | | 62 | No config option for the date format on a card | presentation | XS | open | | 63 | No way to see sent mail, and no filter for it | workflow | S | open | +| 64 | The Sync button carries a mailbox icon, not a refresh one | presentation | XS | **done** 2026-08-11 | +| 65 | No full code review and optimization pass | correctness | ? | open, unspecified | Sizes are rough: XS under an hour, S a sitting, M a session. @@ -4130,6 +4132,68 @@ filters, not something to design here. **Size: S**, and XS if the answer is "it is a tag". +## 64. The Sync button carries a mailbox icon, not a refresh one + +**Observed (user, from the notes):** "the sync button should show the 'refresh' +icon". + +**Cause, verified in code.** The theme-icon table in `MainWindow` maps +`sync` to `mail-receive` (`src/mainwindow.cpp:1000`), which is a mailbox glyph +with an arrow into it. Every other entry in that table is a single line of the +same shape, so this is one string. + +The neighbouring comment (`src/mainwindow.cpp:1001-1003`) records why `archive` +was moved off `mail-mark-read` in 0.12.0: with the toolbar icon-only, the icon +IS the control, and two buttons with different consequences must not look +alike. That reasoning applies here in reverse. `view-refresh` is the standard +freedesktop name and reads as "fetch again" at a glance. + +**Approach.** Change the one mapping to `view-refresh`. The lookup already +guards on `QIcon::fromTheme` returning null (`:1034`), so a theme lacking the +name leaves the action iconless rather than broken. + +**Constraints.** + +- **Check it does not now collide with another action's glyph.** No entry in + the table currently uses `view-refresh`, but the 0.12.0 defect was exactly a + collision, so confirm against the rendered toolbar rather than the table. +- Icon-only is the desktop's choice, honoured through `SH_ToolButtonStyle` + (`:1073`), so the icon may be the only label the user ever sees. + +**Size: XS.** One string. + +### Outcome (done) + +One string: `mail-receive` became `view-refresh` (`src/mainwindow.cpp:1000`). + +The collision the constraint asked about is covered by a test that already +existed, `noTwoActionsShareAnIcon`, which passes. That is a better check than +looking at the toolbar, since it covers every action rather than the handful +currently on it. + +## 65. No full code review and optimization pass + +**Observed (user, from the notes):** "full code review and optimization." + +**Cause:** not a defect. The codebase has grown from the 0.1.0 spec through +sixty-odd backlog items, and nothing has gone back over it as a whole. + +**Why this cannot be planned from the backlog.** "Review and optimize" names no +symptom, no measurement and no target. There is no reported slowness to chase, +and the one performance property the design does commit to (threads emitted in +batches of 200 so a 10k-thread query paints immediately) already holds. An +optimization pass with no measurement behind it is the kind of work that +produces a large diff and no change a user can notice. + +**What it needs before it can be sized.** The user saying which of these they +meant: a correctness/security review of a named area, a specific operation that +feels slow with the query that makes it slow, a dead-code and duplication sweep, +or the translatability audit that is already item 22. The first three are +different pieces of work with different sizes, and the fourth is already +recorded. + +**Size: `?`, unspecified.** Do not propose a design for this; ask. + ## Deferred, unsized, or split out Items noted while triaging but not part of the original list. Same numbering diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index bc5fa92..d9eb989 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -997,7 +997,7 @@ void MainWindow::buildMenus() // rather than taken from the spec on faith. A name the running theme lacks // still degrades to text through the null check below. const QHash<QString, QString> themeIcons = { - { QStringLiteral("sync"), QStringLiteral("mail-receive") }, + { QStringLiteral("sync"), QStringLiteral("view-refresh") }, // NOT mail-mark-read, which mark_all_read below uses. The two shared it // in 0.12.0, and with the toolbar icon-only the icon is the whole // control: two buttons with different consequences looked identical. |
