From f72af1ef300843e43b9f1a43790b815940143253 Mon Sep 17 00:00:00 2001 From: Charalampos Mitsakis Date: Fri, 3 Jun 2022 00:33:52 +0300 Subject: [PATCH] fix: some List items were invisible after window resize --- widget/list.go | 1 + widget/list_test.go | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/widget/list.go b/widget/list.go index d30e1aa497..27d04fe1b0 100644 --- a/widget/list.go +++ b/widget/list.go @@ -111,6 +111,7 @@ func (l *List) scrollTo(id ListItemID) { // Resize is called when this list should change size. We refresh to ensure invisible items are drawn. func (l *List) Resize(s fyne.Size) { l.BaseWidget.Resize(s) + l.offsetUpdated(l.scroller.Offset) l.scroller.Content.(*fyne.Container).Layout.(*listLayout).updateList(true) } diff --git a/widget/list_test.go b/widget/list_test.go index 880c8f8d4b..b7d3f9e4ab 100644 --- a/widget/list_test.go +++ b/widget/list_test.go @@ -384,6 +384,40 @@ func TestList_ScrollThenShrink(t *testing.T) { assert.Equal(t, "Data 0", visibles[0].(*listItem).child.(*Label).Text) } +func TestList_ScrollThenResizeWindow(t *testing.T) { + test.NewApp() + defer test.NewApp() + + data := make([]string, 0, 20) + for i := 0; i < 20; i++ { + data = append(data, fmt.Sprintf("Data %d", i)) + } + + list := NewList( + func() int { + return len(data) + }, + func() fyne.CanvasObject { + return NewLabel("TEMPLATE") + }, + func(id ListItemID, item fyne.CanvasObject) { + item.(*Label).SetText(data[id]) + }, + ) + w := test.NewWindow(list) + w.Resize(fyne.NewSize(300, 300)) + + list.scroller.ScrollToBottom() + + // increase window size enough so that all elements are visible + w.Resize(fyne.NewSize(300, 1000)) + + visibles := list.scroller.Content.(*fyne.Container).Layout.(*listLayout).children + visibleCount := len(visibles) + assert.Equal(t, 20, visibleCount) + assert.Equal(t, "Data 0", visibles[0].(*listItem).child.(*Label).Text) +} + func TestList_NoFunctionsSet(t *testing.T) { list := &List{} w := test.NewWindow(list)