Solaar/lib/solaar/ui
Daniel Banariba 68946a7f1d ui: show the Bolt passkey as a guided click sequence
The passkey page rendered the whole sequence as one run-on sentence
("Press right, right, left, ... and then press left and right buttons
simultaneously."), which is hard to follow and impossible to keep a place in.

Draw it instead as eleven numbered steps: two rows of five top-down mouse
glyphs plus the final both-buttons step, set apart below a separator and drawn
larger so it cannot be mistaken for another single click. Every cell always
shows which button it needs, so the sequence can be read ahead; the emphasis is
a separate channel that only says how far the receiver has got.

Keyboards reuse the same strip with digit keys and an enter key as the final
step, and keep showing the passcode as text since it is meant to be read.

The strip is drawn with cairo in the theme's own colours, so it needs no new
assets and stays legible in any theme. A drawing area is invisible to screen
readers, so the sequence stays available as the existing sentence through the
tooltip and the accessible description.

The bit to button mapping is deliberately unchanged. The receiver never reports
which button was pressed, so a different polarity cannot be validated from
inside Solaar, and the page says as much rather than implying it checked.

Without progress notifications the strip degrades to the plain numbered
sequence with nothing highlighted, so it never depends on them.

Also fixes two defects in the same path:

- the passkey page was appended again on every 500 ms check, stacking dozens of
  duplicate pages during a normal entry and scrolling the pairing instructions
  out of view. It is now created once and refreshed in place.
- pair_device was re-issued every 500 ms for as long as a discovered device was
  pending. It is now issued once per discovered address.
2026-08-13 16:48:48 -06:00
..
about Revert "po: Update list of translators in credits (#3211)" 2026-05-22 11:19:25 -04:00
perkey perkey: add PRO X RAPID media top row layout 2026-07-31 16:34:42 -04:00
__init__.py ui: better handling of missing devices 2026-03-13 13:41:59 -04:00
action.py device: Support per-slot unpair on Lightspeed receivers (CLI + GUI) (#3183) 2026-04-17 09:34:58 -04:00
common.py Introduce error types 2025-01-02 08:29:32 -05:00
config_panel.py ui: don't use old settings when reusing sboxes 2026-06-09 19:35:00 -04:00
desktop_notifications.py tests: fix ui desktop notifications test 2025-01-02 15:04:41 -05:00
diversion_rules.py Add per-key RGB color painter and replace MAP_CHOICE color validator 2026-05-10 17:52:55 -04:00
icons.py Add support for battery-0N0 icon naming scheme 2026-04-20 21:52:00 -04:00
pair_window.py ui: show the Bolt passkey as a guided click sequence 2026-08-13 16:48:48 -06:00
rule_actions.py rules: fix debug messages for MouseClick rule 2025-11-02 21:01:33 +09:00
rule_base.py Enforce rules on RuleComponentUI subclasses 2025-01-01 10:46:04 -05:00
rule_conditions.py fix: center labels and remove buggy entry resizing logic 2025-09-30 10:42:25 -04:00
tray.py solaar/ui: Remove outdated logger enabled checks 2025-01-02 09:26:31 -05:00
window.py centurion: support PRO X 2 LIGHTSPEED headphones Centurion features (#3150) 2026-04-14 11:43:23 -04:00