[Bug] Aanmaken en verwijderen van een app-thema negeren Annuleren #760
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#760
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?
Wat er gebeurt
In Uiterlijk → App-thema staan boven de acht kleurvelden twee knopjes: +
("Kopie maken en aanpassen") en een prullenbak ("Thema verwijderen"). Allebei
doen hun werk onmiddellijk en definitief, terwijl alles eronder pas telt bij
Opslaan.
Gevonden bij het bouwen van #750: ik maakte een kopie om de nieuwe
leesbaarheidsmeting te tonen, drukte daarna op Annuleren, en het profiel stond
er nog steeds.
Reproduceren:
het actieve thema geworden.
Waarom dit meer is dan een schoonheidsfoutje
Dit venster heeft een contract, en het staat letterlijk in de code:
De acht kleurvelden houden zich daaraan: die bewerken
_appearanceProfilein dedialoogstatus. De twee knopjes ernaast schrijven rechtstreeks naar de
settingsProvideren roepen_saveAppearanceProfiles()aan — dus naar schijf.Eén rij, twee soorten gedrag, en een Annuleren-knop onderaan die maar één van
de twee terugdraait. Dat is niet te leren; je moet het een keer meemaken.
Drie bevindingen, in volgorde van zwaarte
1. De prullenbak vraagt niets en is niet terug te draaien.
deleteAppAppearanceProfile(settings_provider.dart:711) verwijdert hetprofiel en schrijft dat meteen weg. Geen bevestiging, geen ongedaan maken, geen
Annuleren die helpt. Een zelfgemaakt thema kan er lang in zitten; één klik en
het is weg, en dat is de enige klik die daarvoor nodig is. Dit is de
zwaarste van de drie.
2. De + maakt niet alleen aan, hij schákelt ook.
createAppAppearanceProfile(:673) zetselectedAppAppearanceProfileNameophet nieuwe profiel. De hele app springt dus naar een thema dat de gebruiker nog
niet heeft gemaakt, en dat blijft zo na Annuleren.
3. Na verwijderen kloppen dialoog en instelling niet met elkaar.
De provider zet de selectie op de letterlijke string
'Europa'(
settings_provider.dart:722), terwijl de knop in de bewerker de dialoogstatusop
AppAppearanceProfile.basiczet(
settings_dialog_appearance.dart, de prullenbak-onPressed). Je ziet dus"Basic" staan terwijl er "Europa" bewaard is — en met Annuleren houd je Europa,
met Opslaan krijg je Basic. Geen van beide is waar je vandaan kwam: het
verwijderen van een kopie van Donker zet je in een licht thema.
Ik liep hier zelf tegenaan: na het opruimen van mijn testprofiel stond de app in
lichte modus, en ik moest Donker met de hand terugzetten.
Richting
Twee routes, en ze sluiten elkaar niet uit.
A — trek de knoppen het contract in. Aanmaken en verwijderen werken op de
dialoogstatus (een lokale lijst plus een "te verwijderen"-verzameling) en landen
pas bij Opslaan, net als de opslagverbindingen — die doen dit al zo, met
_connections. Dan klopt Annuleren voor het hele venster en is bevestiging bijverwijderen niet eens nodig.
Dit is de nette oplossing en past bij hoe de rest van het venster is gebouwd.
B — laat ze direct blijven, maar zeg dat dan. Een bevestiging bij
verwijderen ("dit kan niet ongedaan worden gemaakt"), en de + die aanmaakt zonder
meteen over te schakelen. Goedkoper, maar het laat de tweedeling in het venster
staan, en dat is nou juist wat de verwarring maakt.
Aanbeveling: A, met de fallback uit bevinding 3 als onderdeel daarvan —
verwijderen hoort terug te vallen op het profiel dat vóór de kopie actief was,
niet op een hardgecodeerde naam.
Wordt het B, dan alsnog de hardgecodeerde
'Europa'weg: dat die string er staatterwijl de dialoog
basickiest, is op zichzelf een fout, ongeacht welke route.Kosten
Route A: schatting een dag. Het patroon bestaat al (
_connectionsen hetstijlprofiel doen precies dit), dus het is vooral zorgvuldig werk plus tests op
Annuleren-na-aanmaken en Annuleren-na-verwijderen. Eén nieuwe
l10n.d('…')alser tóch een bevestiging komt (× 31 talen). Geen afhankelijkheid, geen
SBOM-gevolg.
Route B: een dagdeel, plus één of twee nieuwe teksten voor de bevestiging.
Randgevallen die een test verdienen
onveranderd.
instelling hetzelfde?
editable);dat mag niet stilletjes veranderen.
Opgepakt. Tak: fix/appthema-annuleren-760. Route A: aanmaken en verwijderen gaan de dialoogstatus in (lokale profielenlijst, landen pas bij Opslaan), verwijderen valt terug op het profiel dat ervóór actief was in plaats van de hardgecodeerde 'Europa', en de vier randgevallen uit het issue krijgen elk een test — eerst rood tegen de huidige code. Verwachte reikwijdte: settings_dialog_appearance.dart, settings_dialog.dart (dialoogstatus + opslaan), settings_provider.dart, en de tests.
Af, op main:
5a73774(PR #762), daar geverifieerd. Route A zoals aanbevolen: beide knoppen bewerken de werkkopie van het venster en landen pas bij Opslaan via één setAppAppearanceProfiles; de vier losse schrijfwegen zijn weg. Alle drie de bevindingen gedekt: de prullenbak is tot Opslaan omkeerbaar (waarmee een bevestiging inderdaad niet nodig bleek), de + schakelt niets meer om buiten het venster, en de terugval na verwijderen is het thema dat actief was toen het venster openging — dialoog en instelling kunnen niet meer uiteenlopen, de hardgecodeerde 'Europa' is weg. De vier randgevallen uit het issue hebben elk hun test (plus twee tegenproeven); de vier foutdragende eerst rood gezien. Wat er níét in zat: niets uit het issue. Poort: make check groen, secrets/SAST schoon.