Toetsenbordbediering van de openen- en scan-dialoog (#1934) #1940

Merged
brenno merged 3 commits from fix/open-dialog-keyboard-navigation-v2 into main 2026-09-03 09:00:03 +00:00
Owner

Samenvatting

De bestandslijsten in de openen-dialoog en de scan-dialoog waren alleen met de muis te bedienen — Tab landde in de knoppen, pijltjes deden niets, en er was geen zichtbare focusrand. Dit voegt toetsenbordnavigatie toe die het SlideListPanel-patroon volgt:

  • Een Focus om de hele dialoog-content vangt de toetsen die het zoekveld niet zelf consumeert. Pijltjes in het zoekveld bewegen de cursor (en borrelen niet op); Enter vanuit het zoekveld en pijltjes vanaf een knop bereiken de handler.
  • Pijltje omlaag/omhoog (en rechts/links) verplaatst de focus door de rijen, met clamp aan de uiteinden. Home/End springen naar de eerste/laatste rij. Enter opent de aangewezen rij.
  • De aangewezen rij draagt een blauwe focusrand, los van de Ctrl/Cmd-selectie-achtergrond — beide zijn tegelijk zichtbaar.
  • Bij query- of filterwijziging reset de focusindex, zodat een verspringende lijst niet een ander bestand aanwijst dan de gebruiker ziet.
  • ScanLibraryDialog kreeg dezelfde behandeling, zodat de twee lijsten hetzelfde aanvoelen.

Waarom deze opzet

Eerdere pogingen wikkelden alleen de ListView in een Focus. Dat gaf twee problemen: Tab kwam niet betrouwbaar in de lijst, en de End-toets werd onderschept. Een Focus om de hele content lost beide op — toetsen die het gefocuste widget (zoekveld, knop) niet consumeert, borrelen op naar de dialoog-handler.

Waarom geen bewaker

Deze wijziging raakt geen van de vijf punten die de bewaker-skil verplicht maken: niet het bestandsformaat, niet de opslag, geen afhankelijkheid, geen uitgaand verkeer of sleutel, en geen publieke belofte in interface of documentatie. Het is puur interactie in een bestaand dialoogvenster.

Testplan

  • make check groen (analyzer, conventions, volledige suite, dekkingsvloer, goldens)
  • make check-secrets schoon (gitleaks + trufflehog)
  • make sast schoon (semgrep, 0 findings)
  • Regressietest: Enter vanuit zoekveld opent eerste rij
  • Regressietest: Tab → pijltje omlaag → Enter opent eerste rij
  • Regressietest: twee keer omlaag opent tweede rij
  • Regressietest: omhoog vanaf eerste rij blijft op eerste rij
  • Regressietest: Home springt naar eerste rij
  • Regressietest: End springt naar laatste rij

Generated with Devin

## Samenvatting De bestandslijsten in de openen-dialoog en de scan-dialoog waren alleen met de muis te bedienen — Tab landde in de knoppen, pijltjes deden niets, en er was geen zichtbare focusrand. Dit voegt toetsenbordnavigatie toe die het `SlideListPanel`-patroon volgt: - Een `Focus` om de hele dialoog-content vangt de toetsen die het zoekveld niet zelf consumeert. Pijltjes in het zoekveld bewegen de cursor (en borrelen niet op); Enter vanuit het zoekveld en pijltjes vanaf een knop bereiken de handler. - Pijltje omlaag/omhoog (en rechts/links) verplaatst de focus door de rijen, met clamp aan de uiteinden. Home/End springen naar de eerste/laatste rij. Enter opent de aangewezen rij. - De aangewezen rij draagt een blauwe focusrand, los van de Ctrl/Cmd-selectie-achtergrond — beide zijn tegelijk zichtbaar. - Bij query- of filterwijziging reset de focusindex, zodat een verspringende lijst niet een ander bestand aanwijst dan de gebruiker ziet. - `ScanLibraryDialog` kreeg dezelfde behandeling, zodat de twee lijsten hetzelfde aanvoelen. ## Waarom deze opzet Eerdere pogingen wikkelden alleen de `ListView` in een `Focus`. Dat gaf twee problemen: Tab kwam niet betrouwbaar in de lijst, en de `End`-toets werd onderschept. Een `Focus` om de hele content lost beide op — toetsen die het gefocuste widget (zoekveld, knop) niet consumeert, borrelen op naar de dialoog-handler. ## Waarom geen bewaker Deze wijziging raakt geen van de vijf punten die de bewaker-skil verplicht maken: niet het bestandsformaat, niet de opslag, geen afhankelijkheid, geen uitgaand verkeer of sleutel, en geen publieke belofte in interface of documentatie. Het is puur interactie in een bestaand dialoogvenster. #### Testplan - [x] `make check` groen (analyzer, conventions, volledige suite, dekkingsvloer, goldens) - [x] `make check-secrets` schoon (gitleaks + trufflehog) - [x] `make sast` schoon (semgrep, 0 findings) - [x] Regressietest: Enter vanuit zoekveld opent eerste rij - [x] Regressietest: Tab → pijltje omlaag → Enter opent eerste rij - [x] Regressietest: twee keer omlaag opent tweede rij - [x] Regressietest: omhoog vanaf eerste rij blijft op eerste rij - [x] Regressietest: Home springt naar eerste rij - [x] Regressietest: End springt naar laatste rij Generated with [Devin](https://devin.ai)
De openen-dialoog was muismuis: de rijen reageerden niet op het
toetsenbord, en Tab landde in de knoppen in plaats van in de lijst. Een
Focus om de dialoog-content vangt de toetsen die het zoekveld niet zelf
consumeert — pijltjes in het zoekveld bewegen de cursor, Enter en
pijltjes vanaf een knop bereiken de handler. De aangewezen rij draagt een
zichtbare focusrand, los van de Ctrl/Cmd-selectie-achtergrond.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
De scan-dialoog kreeg dezelfde Focus-handler en focusrand als
OpenPresentationDialog, zodat de twee lijsten hetzelfde aanvoelen en de
gebruiker niet twee handgrepen hoeft te leren voor één soort scherm.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
test(openen): regressietest voor toetsenbord door de bestandslijst (#1934)
All checks were successful
scans / scans (pull_request) Successful in 5m24s
static-gate / static-gate (pull_request) Successful in 11m3s
0b7f210473
Enter vanuit het zoekveld opent de eerste rij; Tab naar een knop en dan
pijltje omlaag/omhoog/Home/End verplaatst de focus; Enter opent de
aangewezen rij. Bewaart wat de vorige commit belooft.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
brenno merged commit 9c8ca47015 into main 2026-09-03 09:00:03 +00:00
Sign in to join this conversation.
No description provided.