Dress the capture environment per platform, and drive the menu by keyboard #2

Merged
geusebio merged 2 commits from feature/themed-capture into main 2026-08-14 18:40:31 +00:00
Owner

The first captures were a bare GTK desktop on black: fine for finding defects, wrong for a manual. This dresses the capture environment per platform, makes the walk survive a theme change, and writes down the policy the whole thing serves.

Dressing

themes/{macos,windows,linux}.css — a GTK stylesheet, a panel colour and a desktop colour each. run.sh captures all three.

macOS-dressed Windows-dressed
macOS Windows

It is dressing, and the docs say so twice. These are Linux GTK menus wearing other platforms' colours. A shot claiming to be a macOS capture has to come off a Mac, which needs a runner this project doesn't have. What the dressing buys is a manual whose illustrations don't fight the reader.

The walk is by keyboard now

Row heights move with the theme, the font, and any label that changes length — and a coordinate-driven walk that misses its submenu still writes a plausible-looking PNG. That happened twice here before it was noticed. xdotool key Down/Right follows the menu wherever it goes, and GTK's Right selects the first child, so the walk is three keys deep rather than five.

Also: a compositor, because the host paints its panel transparent and without one that isn't transparency, it's whatever was in the framebuffer; and hsetroot instead of xsetroot, which is the half of a desktop colour a compositor actually reads.

The policy

In the README, and the reason any of this exists:

  1. Every feature carries a capture — the diff in docs/images/ is the review.
  2. The captures are read for defects, not just attached. This harness has already earned that twice: the applications sitting below Quit, and two silently-empty walks.
  3. The captures compose into the user manual, generated from the same run so it cannot drift.
  4. Dressing is labelled as dressing.

The suite and the generated manual are tracked in #627; this PR is the harness and the captures of the toggle work.

Verified

go build, go vet, go test clean; captures regenerated for all three themes and each one read before committing.

The first captures were a bare GTK desktop on black: fine for finding defects, wrong for a manual. This dresses the capture environment per platform, makes the walk survive a theme change, and writes down the policy the whole thing serves. ## Dressing `themes/{macos,windows,linux}.css` — a GTK stylesheet, a panel colour and a desktop colour each. `run.sh` captures all three. | macOS-dressed | Windows-dressed | |---|---| | ![macOS](https://git.grey.ooo/Grey.ooo/someones.computer_tray/raw/commit/19b3d73e94723d76c399f1d2b557b0892807294e/docs/images/macos/tray-gestures.png) | ![Windows](https://git.grey.ooo/Grey.ooo/someones.computer_tray/raw/commit/19b3d73e94723d76c399f1d2b557b0892807294e/docs/images/windows/tray-gestures.png) | **It is dressing, and the docs say so twice.** These are Linux GTK menus wearing other platforms' colours. A shot claiming to *be* a macOS capture has to come off a Mac, which needs a runner this project doesn't have. What the dressing buys is a manual whose illustrations don't fight the reader. ## The walk is by keyboard now Row heights move with the theme, the font, and any label that changes length — and a coordinate-driven walk that misses its submenu still writes a plausible-looking PNG. That happened twice here before it was noticed. `xdotool key Down/Right` follows the menu wherever it goes, and GTK's `Right` selects the first child, so the walk is three keys deep rather than five. Also: a compositor, because the host paints its panel transparent and without one that isn't transparency, it's whatever was in the framebuffer; and `hsetroot` instead of `xsetroot`, which is the half of a desktop colour a compositor actually reads. ## The policy In the README, and the reason any of this exists: 1. **Every feature carries a capture** — the diff in `docs/images/` is the review. 2. **The captures are read for defects, not just attached.** This harness has already earned that twice: the applications sitting below Quit, and two silently-empty walks. 3. **The captures compose into the user manual**, generated from the same run so it cannot drift. 4. **Dressing is labelled as dressing.** The suite and the generated manual are tracked in [#627](https://git.grey.ooo/Grey.ooo/Someones.Computer/issues/627); this PR is the harness and the captures of the toggle work. ## Verified `go build`, `go vet`, `go test` clean; captures regenerated for all three themes and each one read before committing.
The first captures were a bare GTK desktop: fine for finding defects, wrong
for a manual, where unfamiliar widget furniture makes a reader wonder whether
they are even looking at their own app. themes/ dresses the capture — a GTK
stylesheet, a panel colour, a desktop colour — one file per platform, and
run.sh captures all three.

It is dressing, and the README says so twice: these are Linux menus wearing
macOS and Windows colours, and a shot claiming to *be* a macOS capture has to
come off a Mac.

The walk is now by arrow key rather than by pixel coordinate. Row positions
move with the theme, the font, and any label that changes length, and a
coordinate-driven walk that misses its submenu still writes a plausible PNG —
a wasted capture that looks like a good one. Two of them got as far as being
looked at before this changed.

Also here: a compositor, because the host paints its panel transparent and
without one that is not transparency but whatever was in the framebuffer; and
hsetroot rather than xsetroot, which is the half of that a compositor reads.

The policy this serves is written down in the README: every feature carries a
capture, the captures are read for defects rather than just attached, and they
compose into the user manual (platform repo #579).
Point the capture policy at the issue that tracks the suite
All checks were successful
CI / build (pull_request) Successful in 3m4s
19b3d73e94
Sign in to join this conversation.
No reviewers
No labels
in-progress
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Grey.ooo/someones.computer_tray!2
No description provided.