Skip to content

feat(native): UI polish: status ring, key caps, Settings scope and a one-line palette - #797

Merged
omartelo merged 4 commits into
mainfrom
refine/native-ui-polish
Oct 17, 2026
Merged

omartelo merged 4 commits into
mainfrom
refine/native-ui-polish

Conversation

@omartelo

Copy link
Copy Markdown
Collaborator

Why

A pass over the native window's UI, one adjustment per commit, each reviewed in a running window.

What changes

  • Status ring (sidebar_card.go): the card's ring is drawn 1.25dp instead of 1.5. At the web's 1.5 it read heavier, since Gio blends the antialiased edge in linear light; 1dp was too faint.
  • Key caps (settings_hotkeys_view.go): 8dp across and 6dp above the text, with a dp more below for the thicker bottom border, so the text sits centred on the cap's face (measured on a shot: 6px above and below). Every cap moves together: Settings › Hotkeys, the palette and the shortcuts overlay.
  • Settings scope (topbar_apply.go): the top bar's gear always opens Settings on Global. It reopened on the scope last left, so after a tab's Project settings… the next theme or hotkey change landed in a project scope where those rows are Global only. showRemembered is gone with it.
  • Command palette (palette_view.go, palette_logic.go, paths.go):
    • one line per session, project, message and closed session, the path after the name;
    • shortPath: a path of more than three parts keeps its last three behind …, so a worktree reads …worktrees/<hash>/<name>;
    • a session waiting on the user leads the Sessions group and trails a "waiting" chip. The ranking snapshot taken at each opening now records each session's status, not only whether it holds a turn, so the order still never moves under the cursor;
    • filter tabs lose their pills for an underline;
    • History rows put the branch and the age on the right, a "checkout gone" chip in place of the branch, and a second line only under a search: the snippet with the query's words marked, plus the large-transcript index note. A session that ran in its project's folder shows the project's path, which the dropped project name used to stand in for.

No new catalog keys: the chip reuses session.filter.phase.waiting.

Tests

  • TestSettingsButtonOpensOnGlobalAfterAProjectScope failed before the scope change.
  • TestRankSessionsPutsWaitingThenTurnsFirstAndShellsLast replaces TestRankSessionsPutsTurnsFirstAndShellsLast: the contract changed, the ranking now reads a status rather than a held turn, and two waiting cases are new.
  • TestOnlyAWaitingSessionTrailsTheWaitingChip, TestQuerySegmentsMarksEveryToken, TestShortPathKeepsTheLastThreeParts (Linux and Windows paths).

The native gate (gofmt, vet, go test ./... under Xvfb with no render test skipped) is green. Backend and frontend are untouched.

Not covered

  • The waiting chip was checked in a headless render only: a forced status never reached a window on the isolated 0.69.0 backend.
  • A highlighted word is drawn apart from the rest of its word, so "card" in "cards" loses the kerning to the "s".

The ring around a session card's icon read heavier than the web window's
at the same 1.5 width; 1.25dp reads at the web's weight.
The caps were 6x2dp around 10sp text. They now get 8dp across and 6dp
above, with a dp more below for the thicker bottom border, so the text
sits centred on the cap's face.
The gear reopened Settings on whatever scope it was last left in, so a
visit through a tab's Project settings… made the next theme or hotkey
change land in a project scope where those rows are Global only. The gear
now always opens on Global; Project settings… still opens a project's own.
Sessions, projects, messages and closed sessions take one line each, the
path after the name. A path longer than three parts keeps its last three
behind an ellipsis, so a worktree reads as worktrees/<hash>/<name>.

A session waiting on the user leads the Sessions group and trails a
"waiting" chip in its ring's tone. The order is still taken once per
opening, so nothing moves under the cursor.

The filter tabs drop their pills: the current one is underlined in the
foreground.

History keeps the branch and the age on the right, a "checkout gone" chip
in place of the branch, and adds a second line only when a search matched
the conversation, with the query's words marked. A session that ran in
its project's folder shows the project's path.
@omartelo
omartelo merged commit 03bd73e into main Oct 17, 2026
10 checks passed
@omartelo
omartelo deleted the refine/native-ui-polish branch October 17, 2026 16:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant