[Presentatie][P2] Presentator: de secondeklok herbouwt de hele weergave en trekt de focus terug naar het notitieveld #2683

Closed
opened 2026-10-31 09:47:50 +00:00 by brenno · 4 comments
Owner

Symptoom

  1. In de presentatorweergave, en in de publieksweergave bij een getimede presentatie, wordt elke seconde de hele presentator opnieuw gebouwd: huidige dia, volgende-dia-preview en notities. Bij zware dia's (grafiek, tabel, mermaid) geeft dat een regelmatige hapering — hetzelfde soort hapering dat #2633 voor de doorspeelbalk wegnam.
  2. In Mijn notities (N) haalt dezelfde timer elke seconde de focus terug naar het notitieveld. Ga je met Tab naar Sluiten of naar de Visueel/Bron-schakelaar, dan word je binnen een seconde teruggezet. Een schermlezer springt mee.

Oorzaak

In lib/widgets/presentation/fullscreen_presenter.dart:952-960 roept Timer.periodic(1 s) setState(() {}) aan op de hele FullscreenPresenter-state. Daarnaast doet dezelfde timer if (_userNotesMode) … _userNotesFocusNode.requestFocus().

In notitiemodus geeft _handleLogicalKey Tab door (KeyEventResult.ignored, parts/presenter_keys.dart:110-129), dus de normale focus-traversal verplaatst de focus. Een seconde later zet de timer hem terug.

Voorgestelde oplossing

  1. Maak van de klok, en van de tijdteller, een eigen widget met een eigen ticker of een ValueNotifier<DateTime>. Dat is dezelfde aanpak als de doorspeelvoortgang uit #2633 (ValueListenableBuilder, parts/presenter_views.dart:282). De setState over de hele state vervalt daarmee.
  2. Geen periodieke requestFocus meer. De focus wordt bij het openen al gezet (parts/presenter_notes.dart:68-70). Herstel hem alleen als hij de notitie-overlay echt verlaat, bijvoorbeeld met een FocusScope om de overlay en een onFocusChange die bij verlies naar buiten de scope terugzet. Tab binnen de overlay blijft dan werken.

Wat overeind moet blijven

  • Klok en verstreken tijd tikken elke seconde zichtbaar door.
  • Typen in Mijn notities blijft werken na PgUp/PgDn en na een toets die via het beamervenster binnenkomt. Dat is vermoedelijk de reden voor de huidige herhaal-focus.

Toets

  • Widget, met een build-teller op de diapreview: na pump(3 s) zijn er geen extra builds van de dia.
  • Notitiemodus: Tab geeft Sluiten de focus, en na pump(2 s) heeft Sluiten die nog steeds.

Gevonden bij codelezing tijdens de vervolginspectie van 31-10-2026.

## Symptoom 1. In de presentatorweergave, en in de publieksweergave bij een getimede presentatie, wordt **elke seconde de hele presentator opnieuw gebouwd**: huidige dia, volgende-dia-preview en notities. Bij zware dia's (grafiek, tabel, mermaid) geeft dat een regelmatige hapering — hetzelfde soort hapering dat #2633 voor de doorspeelbalk wegnam. 2. In *Mijn notities* (N) haalt dezelfde timer **elke seconde de focus terug naar het notitieveld**. Ga je met Tab naar *Sluiten* of naar de Visueel/Bron-schakelaar, dan word je binnen een seconde teruggezet. Een schermlezer springt mee. ## Oorzaak In `lib/widgets/presentation/fullscreen_presenter.dart:952-960` roept `Timer.periodic(1 s)` `setState(() {})` aan op de hele `FullscreenPresenter`-state. Daarnaast doet dezelfde timer `if (_userNotesMode) … _userNotesFocusNode.requestFocus()`. In notitiemodus geeft `_handleLogicalKey` Tab door (`KeyEventResult.ignored`, `parts/presenter_keys.dart:110-129`), dus de normale focus-traversal verplaatst de focus. Een seconde later zet de timer hem terug. ## Voorgestelde oplossing 1. Maak van de klok, en van de tijdteller, een eigen widget met een eigen ticker of een `ValueNotifier<DateTime>`. Dat is dezelfde aanpak als de doorspeelvoortgang uit #2633 (`ValueListenableBuilder`, `parts/presenter_views.dart:282`). De `setState` over de hele state vervalt daarmee. 2. Geen periodieke `requestFocus` meer. De focus wordt bij het openen al gezet (`parts/presenter_notes.dart:68-70`). Herstel hem alleen als hij de notitie-overlay echt verlaat, bijvoorbeeld met een `FocusScope` om de overlay en een `onFocusChange` die bij verlies naar buiten de scope terugzet. Tab binnen de overlay blijft dan werken. ## Wat overeind moet blijven - Klok en verstreken tijd tikken elke seconde zichtbaar door. - Typen in *Mijn notities* blijft werken na PgUp/PgDn en na een toets die via het beamervenster binnenkomt. Dat is vermoedelijk de reden voor de huidige herhaal-focus. ## Toets - Widget, met een build-teller op de diapreview: na `pump(3 s)` zijn er geen extra builds van de dia. - Notitiemodus: Tab geeft *Sluiten* de focus, en na `pump(2 s)` heeft *Sluiten* die nog steeds. Gevonden bij codelezing tijdens de vervolginspectie van 31-10-2026.
Author
Owner

Opgepakt. Tak: fix/vervolginspectie-3110. Verwachte reikwijdte: de bestanden die in de oorzaak van dit issue staan, plus een regressietest.

Opgepakt. Tak: fix/vervolginspectie-3110. Verwachte reikwijdte: de bestanden die in de oorzaak van dit issue staan, plus een regressietest.
Author
Owner

Opgepakt. Tak: fix/vervolginspectie-3110. Verwachte reikwijdte: lib/widgets/presentation/fullscreen_presenter.dart en de presenter-partbestanden.

Opgepakt. Tak: fix/vervolginspectie-3110. Verwachte reikwijdte: lib/widgets/presentation/fullscreen_presenter.dart en de presenter-partbestanden.
Author
Owner

Staat op main in a6b4dc066 (43a5b532c). De klok tikt in een eigen widget en herbouwt de dia niet. Tab naar Sluiten blijft daar staan. 1a0b45e1e haalde de opbouw van het notitiepaneel onder de methodelengte.

Staat op main in a6b4dc066 (43a5b532c). De klok tikt in een eigen widget en herbouwt de dia niet. Tab naar Sluiten blijft daar staan. 1a0b45e1e haalde de opbouw van het notitiepaneel onder de methodelengte.
Author
Owner

Opgelost op main in a6b4dc066. De zin „elke seconde wordt de hele presentator opnieuw gebouwd“ is gedekt door _PresenterClockTick in lib/widgets/presentation/parts/presenter_overlays.dart. De focus gaat niet meer elke seconde terug naar het notitieveld (lib/widgets/presentation/parts/presenter_notes.dart).

Opgelost op main in a6b4dc066. De zin „elke seconde wordt de hele presentator opnieuw gebouwd“ is gedekt door _PresenterClockTick in lib/widgets/presentation/parts/presenter_overlays.dart. De focus gaat niet meer elke seconde terug naar het notitieveld (lib/widgets/presentation/parts/presenter_notes.dart).
Sign in to join this conversation.
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
LibreKAT/Ocideck#2683
No description provided.