fix: the [edit] buttons' icons, and the locked pane says four lines not one
Two things the lock shipped wrong. **The "done" icon did not exist.** `emblem-ok-symbolic` is a breeze icon; Adwaita — which is what this app runs under — does not have it, so the button that leaves configuration mode drew a missing-image placeholder, i.e. nothing. Both names are now Adwaita's own: `document-edit-symbolic` (the pencil: edit) and `object-select-symbolic` (the check: done). This is exactly the silent failure `toolbar icons:` exists for, so the two `[edit]` buttons get the same treatment: `pane edits: locked=…(ok) config=…(ok)` is read by clicking into configuration mode and back, so one line carries both names and `gtk_icon_theme_has_icon()`'s verdict for each. The invariants now carry the rule, including the trap that a name found under `breeze` is not an answer. **The locked pane was too compact.** One line could not hold what a user opens the pane for, so it is now a small definition list: `signal`, `condition`, `level`, `mode` on four lines, and after that only the figures that are *not* at their defaults — `noise band`, `HF reject`, `pre-trigger`, `hold-off` — because a line reading "band 0" is a line that says nothing. The channel is resolved from the acquired channels and the condition quotes the figures its own shape reads (a width and its comparison, two levels, or a timeout), never one it ignores. The pane is ~192 px tall locked against 580 in configuration mode. One self-inflicted critical on the way: the probe read the summary with `gtk_label_get_text()`, and the container is a grid now — `Gtk-CRITICAL: assertion 'GTK_IS_LABEL (self)' failed`. The text comes from the sync that writes it instead. Verified: `pane edits: locked=document-edit-symbolic(ok) config=object-select-symbolic(ok)`; `panes: trigger=locked signals=locked body_visible=0 summary='signal: square | condition: window, falling | level: 0.3 .. 0.6 | mode: single | noise band: 0.2 | pre-trigger: 20 % | hold-off: 1000 ms'`; `make test-ui` 14 files; zero `Gtk-CRITICAL` and no missing icon.
This commit is contained in:
1 parent
121abbefae
commit
4f4851f4e3
7 files changed
+142
-41
No files matched your search
@@ -184,6 +184,13 @@ Part of [CLAUDE.md](../../CLAUDE.md). These are rules that cost a defect to lear
|
||||
**tooltip and accessible name** from the page's name, then hides the empty label that would otherwise
|
||||
leave the icon off-centre. An icon-only pill is still a named control for a screen reader, and
|
||||
`switcher: … pills=2 labels=0 names=2` is the reading for all three facts at once.
|
||||
- **A stock icon name has to be one *Adwaita* has, and a blank button is the failure mode.** The two
|
||||
panes' `[edit]` buttons are `document-edit-symbolic` (the pencil: edit) and `object-select-symbolic`
|
||||
(the check: done). The done one was `emblem-ok-symbolic`, which breeze ships and **Adwaita does not** —
|
||||
so the button that leaves configuration mode was blank, which no other reading could see: the button
|
||||
worked, the layout was unchanged, and only `pane edits:` (the two names and
|
||||
`gtk_icon_theme_has_icon()`'s verdict, clicked into each mode) would say so. Check a name against
|
||||
`/usr/share/icons/Adwaita` before using it; a name found under `breeze` is not an answer.
|
||||
- **A pane's heading switch and the header bar's button are one control in two places.** Each pane's
|
||||
heading (`build_trigger_panel()` builds the trigger's, `cursors-panel.ui` has the cursors' in its
|
||||
`head`) carries a `GtkSwitch` that runs the *same action* the toolbar button runs, and
|
||||
|
||||
@@ -1142,22 +1142,32 @@ library measures and draws the rect in tests of its own.
|
||||
## `panes:` — the locked and configuration modes
|
||||
|
||||
```
|
||||
[udpscope] panes: trigger=locked signals=locked body_visible=0 summary='window · square · 0.25…0.5 · 20 % pre'
|
||||
[udpscope] pane edits: locked=document-edit-symbolic(ok) config=object-select-symbolic(ok)
|
||||
[udpscope] panes: trigger=locked signals=locked body_visible=0 summary='signal: square | condition: window, falling | level: 0.3 .. 0.6 | mode: single | noise band: 0.2 | pre-trigger: 20 % | hold-off: 1000 ms'
|
||||
[udpscope] panes: trigger=config signals=config body_visible=1 summary=''
|
||||
```
|
||||
|
||||
**`pane edits:`** is the two `[edit]` buttons in each mode, by name and verdict, and it exists because of
|
||||
a real defect: the "done" icon was `emblem-ok-symbolic`, which **Adwaita does not have** (breeze does), so
|
||||
the button that leaves configuration mode was blank — and a blank icon button is invisible in every other
|
||||
reading, exactly as `toolbar icons:` describes for the toolbar. The probe clicks into configuration mode
|
||||
and back, so one line carries both names. **Both must read `(ok)`**, and the pair is
|
||||
`document-edit-symbolic` (the pencil: edit) and `object-select-symbolic` (the check: done).
|
||||
|
||||
Both panes have two modes. **Locked** is what a returning user gets — the trigger pane shows the one line
|
||||
in `summary`, the signal list shows only the signals that are on, and neither offers a control that
|
||||
changes the configuration — and **config** is the full pane, which is what a *first run* gets, because a
|
||||
session file that loaded is what "we have been here before" means. Each heading's `[edit]` button flips
|
||||
its pane.
|
||||
|
||||
- **`summary`** is the locked trigger pane's whole content, so it is read rather than assumed: empty here
|
||||
is a locked pane showing nothing at all. It quotes the shape, the channel, the figures that shape
|
||||
actually reads (a level, two levels, a width plus its comparison, or a timeout) and the pre-trigger
|
||||
share — never a figure the shape ignores.
|
||||
- **`body_visible=0`** is the settings being off screen, which is what makes the pane 42 px tall instead
|
||||
of 580 in `panels:`.
|
||||
- **`summary`** is the locked trigger pane's whole content, as `key: value` pairs separated by ` |`. The
|
||||
pane draws it as a small definition list — `signal`, `condition`, `level`, `mode` on four lines, and
|
||||
then only the figures that are *not* at their defaults (`noise band`, `HF reject`, `pre-trigger`,
|
||||
`hold-off`), because a line reading "band 0" is a line that says nothing. One line was tried first and
|
||||
was too little: the four answers are what a user opens the pane for. `summary=''` with
|
||||
`body_visible=0` is a locked pane showing nothing at all, which is the defect this reads for.
|
||||
- **`body_visible=0`** is the settings being off screen, which is what makes the pane a couple of hundred
|
||||
pixels instead of 580 in `panels:`.
|
||||
- **The locked signal list drops the rows of the signals that are off**, so `rows` counts what is on:
|
||||
`signals panel: … rows=3 signals=2 divider=1` is two on signals and the `MATH` divider, not four
|
||||
signals. Its `+` goes with them — a `+` on a locked list opens the editor the lock exists to keep shut.
|
||||
|
||||
Reference in new issue
Block a user