NFR-A11Y-2 — Eighteen Slint files are unnamed to assistive technology #36

Open
opened 2026-09-05 16:20:17 +00:00 by dtourolle · 3 comments
Owner

NFR-A11Y-2 — Accessibility. accessible-* appears five times in the whole interface, all five on one control.

The state of it

The five are on the parameter slider in adjust.slint. Nothing is set from the Rust side at all. Everything else across eighteen Slint files is unnamed to AT-SPI and to TalkBack — the library grid, the develop canvas, the mask list, the crop overlay, the import flow, the settings.

Acceptance

  • Every interactive control carries a role and an accessible name.
  • Names come from labels::resolve, so they localise with everything else (#35) rather than becoming a second set of hardcoded strings.
  • State that is currently carried by drawing — a lit clipping marker, a selected mask, a picked frame — is exposed as accessible state, not just as pixels.
  • Keyboard focus order is defined and visible in the develop and library views.

Sequencing

Worth doing alongside #35, not after it: both pass through labels::resolve, and doing them separately means touching all eighteen files twice.

Related

  • #38 — spike S13, Slint's Android accessibility, which the requirement's own caveat asks for and which has almost nothing to test against until this lands.
  • #37 — the colour-label interface, which should be built with an accessible shape from the outset rather than retrofitted.

See docs/outstanding.md §6.

**NFR-A11Y-2 — Accessibility.** `accessible-*` appears five times in the whole interface, all five on one control. ## The state of it The five are on the parameter slider in `adjust.slint`. **Nothing is set from the Rust side at all.** Everything else across eighteen Slint files is unnamed to AT-SPI and to TalkBack — the library grid, the develop canvas, the mask list, the crop overlay, the import flow, the settings. ## Acceptance - [ ] Every interactive control carries a role and an accessible name. - [ ] Names come from `labels::resolve`, so they localise with everything else (#35) rather than becoming a second set of hardcoded strings. - [ ] State that is currently carried by drawing — a lit clipping marker, a selected mask, a picked frame — is exposed as accessible state, not just as pixels. - [ ] Keyboard focus order is defined and visible in the develop and library views. ## Sequencing Worth doing **alongside #35**, not after it: both pass through `labels::resolve`, and doing them separately means touching all eighteen files twice. ## Related - #38 — spike S13, Slint's Android accessibility, which the requirement's own caveat asks for and which has almost nothing to test against until this lands. - #37 — the colour-label interface, which should be built with an accessible shape from the outset rather than retrofitted. See `docs/outstanding.md` §6.
dtourolle added the uiunmet-requirementsize:Ma11y labels 2026-09-05 16:20:17 +00:00
Author
Owner

Do alongside #35 (same eighteen files) and #37 (build the label UI accessible from the outset).
Unblocks #38, which has almost nothing to test against until this lands.

**Do alongside** #35 (same eighteen files) and #37 (build the label UI accessible from the outset). **Unblocks** #38, which has almost nothing to test against until this lands.
Author
Owner

Progress check (2026-09-24). This undercounts: there are 91 accessible-* lines across widgets/controls/toolrail/adjust/launch/app.slint (8e4befa, 2026-08-30), enforced by ui/dr-ui/tests/ui_controls_are_accessible.rs.
Still missing: the library grid, canvas, mask list, crop overlay, import and settings have none. Names are hardcoded English rather than taken from labels::resolve. State that is only drawn (clipping marker, selected mask, pick) is not exposed, except the show-original toggle. No focus order.

Progress check (2026-09-24). This undercounts: there are 91 `accessible-*` lines across widgets/controls/toolrail/adjust/launch/app.slint (8e4befa, 2026-08-30), enforced by `ui/dr-ui/tests/ui_controls_are_accessible.rs`. Still missing: the library grid, canvas, mask list, crop overlay, import and settings have none. Names are hardcoded English rather than taken from `labels::resolve`. State that is only drawn (clipping marker, selected mask, pick) is not exposed, except the show-original toggle. No focus order.
Author
Owner

Progress check (2026-09-26, v0.16.0): 125 accessible-* lines across 11 Slint files, up from 91 in 6 on 2026-09-24. New since then: the shared ScrollBar in widgets.slint, the duplicate-originals review (duplicates.slint), and the film list popup (the Film row has a button role). Still as listed on 2026-09-24: the library grid, canvas, mask list, crop overlay and import have none; names are hardcoded English rather than from labels::resolve; drawn-only state (clipping, the selected mask, pick) is not exposed; no focus order.

Progress check (2026-09-26, v0.16.0): 125 `accessible-*` lines across 11 Slint files, up from 91 in 6 on 2026-09-24. New since then: the shared `ScrollBar` in widgets.slint, the duplicate-originals review (duplicates.slint), and the film list popup (the Film row has a button role). Still as listed on 2026-09-24: the library grid, canvas, mask list, crop overlay and import have none; names are hardcoded English rather than from `labels::resolve`; drawn-only state (clipping, the selected mask, pick) is not exposed; no focus order.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dtourolle/DarkRoom#36