Sluiten en herstellen kennen alleen presentaties: een documenttabblad breekt op 'Opslaan' #1614
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#1614
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?
De tabbladlaag kent sinds de documentmodus twee soorten, maar de sluit- en herstelmeldingen zijn nooit meegegroeid. Ze noemen alles een presentatie — en op één plek is het meer dan de bewoording: daar loopt het pad voor een document stuk.
1. Een vuil documenttabblad sluiten met "Opslaan" gooit een StateError
requestCloseTab(lib/widgets/shell/shell_actions.dart) hangt aan het kruisje in de tabbalk en aan het 'alleen afspelen'-scherm. Voor élk vuil tabblad — ook een document — toont het de bevestiging, en op de keuze Opslaan doet het:TabInfo.deckNotifier(lib/state/tabs_provider_tab_info.dart) gooit voor een documenttabblad met opzet:Er staat geen soort-poort vóór die aanroep, en het kruisje wordt voor een documenttabblad niet verborgen. Wie dus een gewijzigd document sluit en kiest voor opslaan, krijgt geen opslag en geen gesloten tabblad — het pad breekt af.
De juiste ingang bestaat al:
saveTabWithDestination(lib/widgets/shell/shell_actions_connections.dart) routeert op soort en wordt gebruikt door de app-brede Cmd/Ctrl+S en de opslaan-bij-afsluiten-lus. Alleen deze plek gaat er nog omheen.Gelezen in de code op
main, niet nagespeeld in de draaiende app; de regressietest hoort bij de reparatie.2. Drie meldingen noemen een document een presentatie
lib/widgets/app_shell.dart,_maybeRestore): "Er zijn 2 presentaties met niet-opgeslagen wijzigingen gevonden van een vorige sessie" — terwijl beide momentopnameskind: documentdroegen. Met eigen ogen gezien; de twee.json-bestanden inrecovery/zeggen allebei"kind": "document".label · tijdstip.RecoverySnapshot.kindis er, en de tabbalk en de recente-lijst tónen die soort al met een pictogram. Hier niet, terwijl je juist daar kiest wat je terughaalt.onWindowClose): "Er zijn presentaties met niet-opgeslagen wijzigingen. Sla ze op voordat de app sluit." Die lus loopt overanyDirty, dus over beide soorten.Wie in de documentmodus werkt, krijgt bij het afsluiten dus een waarschuwing over presentaties die hij niet open heeft staan — en moet zelf bedenken dat het over zijn notitie gaat.
3. Meegenomen: die tekst is niet vertaalbaar zoals hij nu staat
De meervoudsregel wordt uit drie stukken geplakt met het getal ertussen:
Dat legt de Nederlandse woordvolgorde op aan 31 talen en laat geen ruimte voor talen met een andere meervoudsvorm of een ander telwoordgedrag. Wie deze meldingen tóch aanraakt, kan er beter één string met een plaatshouder van maken.
Wat een oplossing moet doen
requestCloseTablangssaveTabWithDestinationlaten lopen in plaats van langstab.deckNotifier— één regel, mét een regressietest die een vuil documenttabblad sluit en op Opslaan klikt.Nieuwe zichtbare tekst betekent 31 vertalingen (
make add-l10n), dus de kosten zitten daar en niet in de logica.Gevonden tijdens het onderzoek naar de niet-opgeslagen-stip (#1611).