Documenteditor: knippen en slim plakken moeten de bedoelde tekstpositie vasthouden #2466
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
release-blocker
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#2466
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Gebruikersprobleem
Knippen en plakken horen precies op de selectie/caret van het moment van de opdracht te werken. Tijdens een trage klembordactie kan de gebruiker verder typen of elders klikken; de huidige asynchrone routes kunnen dan een ander bereik wissen of op een andere plek invoegen. Dit is een onderbouwd race-risico, nog niet live gereproduceerd.
Oorzaak op origin/main (
334604137)WysiwygNotesField._copySelection legt de selectie vast, wacht op Clipboard.setData en wist daarna de oude offsets in de dan actuele Quill-inhoud (lib/widgets/markdown_editor/wysiwyg_notes_field.dart:305-333). _smartPaste legt alleen de visuele caret vóór zijn awaits vast; het bronpad en het tabel-/beeldblokpad gebruiken later de actuele selectie (lib/widgets/parts/document_editor_layouts.dart:79-145). Eerdere #1667/#2138 repareerden verkeerde visuele plakposities in normale omstandigheden, niet tussentijdse edits tijdens klembord-I/O.
Oplossing
Maak klembordmutaties een atomaire gebruikershandeling: leg documentidentiteit, revisie, stand en selectie vast vóór de eerste await. Knippen verwijdert exact de gekopieerde selectie als de revisie nog klopt; bij een tussentijdse wijziging geen stil wissen van een ander bereik. Plakken gebruikt de oorspronkelijke positie of meldt duidelijk dat de bestemming is veranderd, zonder te gokken. Eén begrijpelijke undo-stap per handeling.
Acceptatie
Tests met gecontroleerd vertraagde Clipboard.setData/getData en tussentijds typen, verplaatsen van caret, standwissel en sluiten van tab. Controleer bron en Visueel, gewone tekst, tabel en afbeelding: geen verkeerd gewiste/ingevoegde inhoud, geen crash, juiste undo/redo.