fix regression with not updating grid view items occasionally

This commit is contained in:
Drew Weymouth
2024-02-02 08:55:38 -08:00
parent 7e8a4d6d37
commit 7943b17199
+17 -20
View File
@@ -225,9 +225,7 @@ func (g *GridView) createGridWrap() {
// update func // update func
func(itemID widget.GridWrapItemID, obj fyne.CanvasObject) { func(itemID widget.GridWrapItemID, obj fyne.CanvasObject) {
ac := obj.(*GridViewItem) ac := obj.(*GridViewItem)
if itemID != ac.ItemIndex { g.doUpdateItemCard(int(itemID), ac)
g.doUpdateItemCard(int(itemID), ac)
} // else nothing to do
}, },
) )
} }
@@ -276,30 +274,29 @@ func (g *GridView) createNewItemCard() fyne.CanvasObject {
} }
func (g *GridView) doUpdateItemCard(itemIdx int, card *GridViewItem) { func (g *GridView) doUpdateItemCard(itemIdx int, card *GridViewItem) {
if itemIdx > g.highestShown {
g.highestShown = itemIdx
}
var item GridViewItemModel
g.stateMutex.Lock() 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 { if c, ok := g.itemForIndex[card.ItemIndex]; ok && c == card {
delete(g.itemForIndex, card.ItemIndex) delete(g.itemForIndex, card.ItemIndex)
} }
card.ItemIndex = itemIdx card.ItemIndex = itemIdx
g.itemForIndex[itemIdx] = card g.itemForIndex[itemIdx] = card
g.stateMutex.Unlock() 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.Update(item)
card.ImgLoader.Load(item.CoverArtID) card.ImgLoader.Load(item.CoverArtID)