From 7943b17199072b3fcaa0ba5c9c2cd0b1f6891bfa Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Fri, 2 Feb 2024 08:55:38 -0800 Subject: [PATCH] fix regression with not updating grid view items occasionally --- ui/widgets/gridview.go | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/ui/widgets/gridview.go b/ui/widgets/gridview.go index 43f1fd0..2346734 100644 --- a/ui/widgets/gridview.go +++ b/ui/widgets/gridview.go @@ -225,9 +225,7 @@ func (g *GridView) createGridWrap() { // update func func(itemID widget.GridWrapItemID, obj fyne.CanvasObject) { ac := obj.(*GridViewItem) - if itemID != ac.ItemIndex { - g.doUpdateItemCard(int(itemID), ac) - } // else nothing to do + g.doUpdateItemCard(int(itemID), ac) }, ) } @@ -276,30 +274,29 @@ func (g *GridView) createNewItemCard() fyne.CanvasObject { } func (g *GridView) doUpdateItemCard(itemIdx int, card *GridViewItem) { + if itemIdx > g.highestShown { + g.highestShown = itemIdx + } + var item GridViewItemModel g.stateMutex.Lock() + // itemIdx can rarely be out of range if the data is being updated + // as the view is requested to refresh + if itemIdx < len(g.items) { + item = g.items[itemIdx] + } + card.Cover.Im.CenterIcon = g.Placeholder + if !card.NeedsUpdate(item) && card.ItemIndex == itemIdx { + // nothing to do + g.stateMutex.Unlock() + return + } + // update itemForIndex map if c, ok := g.itemForIndex[card.ItemIndex]; ok && c == card { delete(g.itemForIndex, card.ItemIndex) } card.ItemIndex = itemIdx g.itemForIndex[itemIdx] = card g.stateMutex.Unlock() - - if itemIdx > g.highestShown { - g.highestShown = itemIdx - } - var item GridViewItemModel - g.stateMutex.RLock() - // itemIdx can rarely be out of range if the data is being updated - // as the view is requested to refresh - if itemIdx < len(g.items) { - item = g.items[itemIdx] - } - g.stateMutex.RUnlock() - card.Cover.Im.CenterIcon = g.Placeholder - if !card.NeedsUpdate(item) { - // nothing to do - return - } card.Update(item) card.ImgLoader.Load(item.CoverArtID)