Presentatiemodus: na Escape springt de editor terug naar de startdia i.p.v. de dia waar je stopte #1111

Closed
opened 2026-08-02 08:00:03 +00:00 by brenno · 2 comments
Owner

Wat er misgaat

Start je een presentatie op dia X, blader je door naar dia Y, en druk je dan op Escape, dan staat de editor daarna weer op dia X (waar je begon) in plaats van op Y (waar je stopte).

Dat is meestal niet gewenst: wie tijdens het presenteren op Escape drukt op een bepaalde dia, doet dat vaak met een reden (daar iets aanpassen of nakijken) en wil op díe dia verder.

Gewenst gedrag

Na het verlaten van de presentatie selecteert de editor de dia die op dat moment in beeld was.

Waar / oorzaak

  • Launcherlib/widgets/shell/shell_actions_present.dart: de presenter wordt gestart met initialIndex: renderInitial (afgeleid van editor.selectedIndex). Ná afloop doet presenting.then((_) { if (liveEdited) deckNotifier.refreshEditorFields(); }) niets met de eindpositie.
  • Presenter-exitlib/widgets/presentation/fullscreen_presenter.dart, _exit()Navigator.pop(context) zonder resultaat. De actuele _index van de presenter wordt nergens teruggegeven.
  • Selectie — de editor houdt de huidige dia bij in editorProvider.selectedIndex (lib/state/editor_provider.dart) met select(int index). Die wordt bij het afsluiten niet bijgewerkt.

Kortom: de presenter kent zijn eindpositie wél (_index), maar geeft die niet door, en de launcher zet de selectie niet.

Richting (suggestie, geen eis)

  • Laat _exit() de huidige dia teruggeven bij het poppen — bij voorkeur via het dia-id (_currentSlide.id), niet via de ruwe render-index. Reden: de presenter toont render-dia's (findings-pagina's zijn uitgeklapt via expandFindingsForRender), dus de render-index ≠ de bron-dia-index. onSlideChanged mapt nu al terug op id — volg dat patroon.
  • In de launcher: lees dat id/positie uit presenting.then(...) en roep editorNotifier.select(bronIndex) aan (de bron-dia met dat id).
  • Randgevallen: presenteren met een leeg deck; een tijdens het presenteren verwijderde dia (id niet meer te vinden → clamp); en de dual-window/zaal-modus.

Toetsen

Regressietest: start de presenter op index 0, navigeer naar index N, roep de exit aan en verifieer dat editorProvider.selectedIndex op de bron-dia van N staat. Ook mét findings-uitklap toetsen (render-index ≠ bron-index) zodat de id-mapping klopt.

## Wat er misgaat Start je een presentatie op dia X, blader je door naar dia Y, en druk je dan op **Escape**, dan staat de editor daarna weer op dia **X** (waar je begon) in plaats van op **Y** (waar je stopte). Dat is meestal niet gewenst: wie tijdens het presenteren op Escape drukt op een bepaalde dia, doet dat vaak met een reden (daar iets aanpassen of nakijken) en wil op díe dia verder. ## Gewenst gedrag Na het verlaten van de presentatie selecteert de editor de dia die op dat moment in beeld was. ## Waar / oorzaak - **Launcher** — `lib/widgets/shell/shell_actions_present.dart`: de presenter wordt gestart met `initialIndex: renderInitial` (afgeleid van `editor.selectedIndex`). Ná afloop doet `presenting.then((_) { if (liveEdited) deckNotifier.refreshEditorFields(); })` niets met de eindpositie. - **Presenter-exit** — `lib/widgets/presentation/fullscreen_presenter.dart`, `_exit()` → `Navigator.pop(context)` **zonder resultaat**. De actuele `_index` van de presenter wordt nergens teruggegeven. - **Selectie** — de editor houdt de huidige dia bij in `editorProvider.selectedIndex` (`lib/state/editor_provider.dart`) met `select(int index)`. Die wordt bij het afsluiten niet bijgewerkt. Kortom: de presenter kent zijn eindpositie wél (`_index`), maar geeft die niet door, en de launcher zet de selectie niet. ## Richting (suggestie, geen eis) - Laat `_exit()` de huidige dia teruggeven bij het poppen — bij voorkeur via het **dia-id** (`_currentSlide.id`), niet via de ruwe render-index. Reden: de presenter toont *render-dia's* (findings-pagina's zijn uitgeklapt via `expandFindingsForRender`), dus de render-index ≠ de bron-dia-index. `onSlideChanged` mapt nu al terug op id — volg dat patroon. - In de launcher: lees dat id/positie uit `presenting.then(...)` en roep `editorNotifier.select(bronIndex)` aan (de bron-dia met dat id). - Randgevallen: presenteren met een leeg deck; een tijdens het presenteren verwijderde dia (id niet meer te vinden → clamp); en de dual-window/zaal-modus. ## Toetsen Regressietest: start de presenter op index 0, navigeer naar index N, roep de exit aan en verifieer dat `editorProvider.selectedIndex` op de bron-dia van N staat. Ook mét findings-uitklap toetsen (render-index ≠ bron-index) zodat de id-mapping klopt.
Author
Owner

Opgepakt. Tak: fix/present-exit-restore-slide-1111. Verwachte reikwijdte: lib/widgets/presentation/fullscreen_presenter.dart (_exit geeft eind-dia-id terug via de route), lib/widgets/shell/shell_actions_present.dart (launcher selecteert die bron-dia na afloop), plus een regressietest. Bron-dia via id, niet via render-index (findings-uitklap).

Opgepakt. Tak: fix/present-exit-restore-slide-1111. Verwachte reikwijdte: lib/widgets/presentation/fullscreen_presenter.dart (_exit geeft eind-dia-id terug via de route), lib/widgets/shell/shell_actions_present.dart (launcher selecteert die bron-dia na afloop), plus een regressietest. Bron-dia via id, niet via render-index (findings-uitklap).
Author
Owner

Opgelost op main via #1116 (merge 10338914, fix f5c199d7).

De presenter geeft bij het afsluiten het bron-dia-id terug (present/show/showDualScreen → Future<String?>); _exit() popt de route ermee, en de launcher (shell_actions_present.dart) mapt dat id terug op de bron-dia en selecteert die. Via het id, niet de render-index — een lange bevinding klapt uit tot meerdere render-pagina's met hetzelfde id. Leeg deck en een tijdens het presenteren verwijderde dia (id niet meer te vinden → geen match) laten de selectie ongemoeid.

Regressietests in test/shell_present_and_close_test.dart, alle drie eerst rood tegen de ónherstelde code: basis (navigeer + Escape), render≠bron via een overgeslagen dia, en de findings-uitklap. make check was groen op de schone basis.

Wat er NIET in zit: de dual-window/zaal-modus wordt niet door een test geraakt (vergt een tweede scherm); die exit-tak popt langs exact hetzelfde _exit() en is analyze-schoon, maar niet apart getoetst.

Opgelost op main via #1116 (merge 10338914, fix f5c199d7). De presenter geeft bij het afsluiten het bron-dia-id terug (present/show/showDualScreen → Future<String?>); `_exit()` popt de route ermee, en de launcher (shell_actions_present.dart) mapt dat id terug op de bron-dia en selecteert die. Via het id, niet de render-index — een lange bevinding klapt uit tot meerdere render-pagina's met hetzelfde id. Leeg deck en een tijdens het presenteren verwijderde dia (id niet meer te vinden → geen match) laten de selectie ongemoeid. Regressietests in test/shell_present_and_close_test.dart, alle drie eerst rood tegen de ónherstelde code: basis (navigeer + Escape), render≠bron via een overgeslagen dia, en de findings-uitklap. `make check` was groen op de schone basis. Wat er NIET in zit: de dual-window/zaal-modus wordt niet door een test geraakt (vergt een tweede scherm); die exit-tak popt langs exact hetzelfde `_exit()` en is analyze-schoon, maar niet apart getoetst.
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#1111
No description provided.