Een ster in de tracklist aanklikken sloeg niets op, en werkt nu #112

Merged
roelof merged 4 commits from sterren-tracklist-fix into main 2026-08-17 14:57:59 +02:00
Owner

Het herbinden van de hele lijst vanuit de eigen klik-handler van een rij-knop is een reentrancy-val in GTK: de widget die de klik nog aan het afhandelen was, werd tegelijk herbonden en niets kwam op het scherm terecht. Verplaatst naar OnMainThread, zodat het pas gebeurt nadat de klik is afgehandeld.

De vijf sterren staan ook dichter op elkaar: elke platte knop had zijn eigen padding, waar de lege ruimte tussen de sterren vandaan kwam.

Ik heb dit niet zelf kunnen klikken en zien werken — geen schermafbeelding en geen manier om een klik te simuleren in deze sessie. De hypothese over de oorzaak is beargumenteerd vanuit de code, niet geverifieerd door het echt te proberen. Graag zelf even testen voor het mergen.

Closes #111.

Het herbinden van de hele lijst vanuit de eigen klik-handler van een rij-knop is een reentrancy-val in GTK: de widget die de klik nog aan het afhandelen was, werd tegelijk herbonden en niets kwam op het scherm terecht. Verplaatst naar OnMainThread, zodat het pas gebeurt nadat de klik is afgehandeld. De vijf sterren staan ook dichter op elkaar: elke platte knop had zijn eigen padding, waar de lege ruimte tussen de sterren vandaan kwam. **Ik heb dit niet zelf kunnen klikken en zien werken** — geen schermafbeelding en geen manier om een klik te simuleren in deze sessie. De hypothese over de oorzaak is beargumenteerd vanuit de code, niet geverifieerd door het echt te proberen. Graag zelf even testen voor het mergen. Closes #111.
RateTrack liet trackStore al zijn rijen herbinden, en dat raakte ook de
rij van de knop waarvan het klik-handler nog op de stack stond — een
widget herbinden terwijl zijn eigen klikafhandeling nog loopt is niet
iets waar GTK zich aan houdt, en niets van SetLabel kwam nog op het
scherm terecht. Het herbinden gaat nu via OnMainThread, na het klikken.

De vijf sterren stonden ook verder uit elkaar dan nodig: elke platte
knop had zijn eigen ruime padding, wat een lege Gtk.Box niet oplost.
Een kleine stijlregel dringt dat terug.

Closes #111.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
echte probleem, en dat is nu wel verholpen

trackStore.ItemsChanged bindt een rij alleen opnieuw als het object op
die plek is veranderd, en dat gebeurt hier nooit — de waardering staat
in IRatingBook, nooit op TrackRow. De opslag werkte dus al, alleen het
scherm hoorde er nooit iets van totdat een herstart de rijen helemaal
opnieuw opbouwde.

TrackRow houdt nu net als bij een hoes (IPictured.Bound) een verwijzing
naar zijn eigen vijf sterren vast zolang het op het scherm staat
(RatingBox, gezet bij bind en losgelaten bij unbind). RateTrack zoekt
de rij op en werkt die knoppen rechtstreeks bij, in plaats van op een
herbind van de hele lijst te hopen die nooit kwam.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Author
Owner

De eerste poging (OnMainThread) loste het niet op, precies zoals je testte: opslaan werkte al, alleen het scherm werd nooit bijgewerkt zonder herstart. De echte oorzaak: trackStore.ItemsChanged bindt een rij alleen opnieuw als het object daar is veranderd, en dat gebeurt nooit — de waardering staat in IRatingBook, niet op TrackRow. Nu houdt elke rij, net als bij een hoes, een verwijzing naar zijn eigen vijf sterren vast zolang die op het scherm staat, en werkt RateTrack die rechtstreeks bij. Graag opnieuw testen.

De eerste poging (OnMainThread) loste het niet op, precies zoals je testte: opslaan werkte al, alleen het scherm werd nooit bijgewerkt zonder herstart. De echte oorzaak: `trackStore.ItemsChanged` bindt een rij alleen opnieuw als het object daar is veranderd, en dat gebeurt nooit — de waardering staat in `IRatingBook`, niet op `TrackRow`. Nu houdt elke rij, net als bij een hoes, een verwijzing naar zijn eigen vijf sterren vast zolang die op het scherm staat, en werkt `RateTrack` die rechtstreeks bij. Graag opnieuw testen.
buiten in plaats van mee te krimpen

Een schermafdruk liet steeds precies vier sterren zien, nooit vijf —
tegenover de transportbalk eronder, die er wel vijf toont. De vaste
kolombreedte liet geen ruimte voor het thema's eigen minimumbreedte per
knop, dus viel de vijfde knop buiten de kolom en dus buiten wat er
getekend en aangeklikt kon worden. Elke knop krijgt nu een expliciete
maximale breedte in plaats van op de CSS-cascade alleen te vertrouwen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
rechtstreeks bijgewerkt vanuit de klik zelf, zonder omweg

RateTrack zoekt de rij nog steeds op via trackStore en RatingBox voor
het geval elders — de transportbalk — een rij raakt die hier ook nog
in beeld staat, maar de rij-knop wacht daar niet meer op: hij heeft
zijn eigen box al bij de hand uit dezelfde closure die hem gebouwd
heeft, en werkt die meteen bij. Wat er precies mis ging met de
zoekopdracht is niet gevonden — dit omzeilt het probleem in plaats van
het te verklaren.

Een regel debug-logging erbij: als dit ook niet zichtbaar wordt, staat
in het logbestand tenminste hoeveel knoppen er gevonden zijn en welke
waardering er ingevuld werd, in plaats van weer te moeten gokken.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
roelof merged commit 16eeab9b50 into main 2026-08-17 14:57:59 +02:00
roelof deleted branch sterren-tracklist-fix 2026-08-17 14:57:59 +02:00
Sign in to join this conversation.
No reviewers
No labels
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
KavalirOS/RockHeaven!112
No description provided.