De niet-opgeslagen-stip verdwijnt weer als je opslaat #1611
No reviewers
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck!1611
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/stip-blijft-na-opslaan"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
De niet-opgeslagen-stip bleef staan nadat je had opgeslagen. Gemeld voor een presentatie én voor een document; de oorzaak ligt in de editors, niet in het opslaan.
Wat er misging
Een
TextEditingControllerwekt zijn luisteraars bij élke wijziging van zijn waarde — en de cursorpositie zit in diezelfde waarde. Eén klik in een tekstveld is dus net zo goed een melding als een aanslag. De dia-editors lazen elke melding als een bewerking en schreven een ongewijzigde dia terug naar het deck.Met de diagnose in de draaiende app, op een zojuist opgeslagen presentatie:
Drie gevolgen, alle drie zichtbaar voor de gebruiker:
saveAszag daardoor een gegroeide ongedaan-stapel, concludeerde met de heuristiek uit #1473 dat er "tijdens het schrijven was doorgetypt", en liet het deck bewust vuil. Bestand geschreven, stip blijft staan — en het herstelbestand bleef op schijf staan voor werk dat allang bewaard was. Zo gemeten in de app:SAVEAS deckChanged=true undoBefore=1 undoNow=2 userEdited=true.Wat er verandert
Nieuw:
EditorTextController(lib/widgets/editors/editor_text_controller.dart).addListenerblijft ongefilterd — het tekstveld zelf moet elke cursorwissel zien, anders beweegt de cursor niet mee op het scherm.addTextListenermeldt alleen een échte tekstwijziging.Alle dia-editors, de notitievelden van het presentatiescherm en de tabelbewerker in de weergave gaan nu langs die tweede ingang.
TextField(onChanged:)was al veilig — dat vuurt alleen op tekst — dus editors die dáármee werken blijven ongemoeid.Aardig detail: in
table_edit_controller.dartstond dit filter al met de hand geschreven, mét een commentaar dat het probleem precies beschrijft. Daar was het één keer lokaal opgelost; nu is het het algemene geval, en wat daar overblijft zijn de rij- en kolombewerkingen.De heuristiek in
saveAs(#1473) blijft zoals hij is: hij heeft nu geen valse trigger meer, en zonder aanleiding een tweede mechanisme naast een bestaande vangnet zetten maakt het geheel niet begrijpelijker.Toetsen
test/caret_is_not_an_edit_test.dart, eerst rood tegen de onherstelde code (2 van de 3 klik-toetsen faalden met precies één spookbewerking):addListenermaar nietaddTextListener, en een afgemelde luisteraar hoort niets meer;Het codeveld heeft een eigen toets omdat die editor zijn luisteraar als losse closure ophangt in plaats van als benoemde methode — de vorm die bij het omzetten het makkelijkst wordt overgeslagen.
make check-fullgroen: 10.191 tests, dekking 87,2%, per-bestand-vloer 0, gitleaks + trufflehog zonder bevindingen, semgrep 0 findings. DAST (ZAP) niet gedraaid — deze wijziging raakt het geserveerde weboppervlak niet.Wat niet met eigen ogen is nagekeken: het opslaan-met-bewaarvenster in de draaiende app na de reparatie. De reproductie vóór de reparatie is wél live gedaan (daar komen de logregels hierboven vandaan); de nacontrole strandde op een vergrendeld scherm. De widgettest dekt het klik-pad volledig, maar kan het systeem-bewaarvenster niet nabootsen.
Bewaker: overgeslagen, met reden. Deze wijziging raakt het bestandsformaat niet, de opslag niet, geen afhankelijkheid, geen uitgaand verkeer en geen publieke belofte — het is een interne correctie in de editorlaag.
Meegeleverde refactor
fullscreen_presenter.dartstond exact op zijn basislijn, dus de ene importregel die de fix nodig heeft tripte de groottepoort._replaceSlide— dat geen enkel veld van de schermtoestand raakt en alleen vanuitpresenter_contentenpresenter_tablewordt aangeroepen — verhuist naarpresenter_support.dart, in een eigen commit. Het bestand zakt van 1043 naar 1038 regels en de basislijn zakt mee.