From 9173d3699e3d65e48011a720e52ccf7e096eef9f Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Tue, 28 Dec 2021 14:30:05 -0800 Subject: [PATCH 1/4] Stop showing popup off-screen, fixes menu scroll Relates to #2708 --- container/tabs.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/container/tabs.go b/container/tabs.go index 5d0fca34ea..67dacd425d 100644 --- a/container/tabs.go +++ b/container/tabs.go @@ -107,6 +107,12 @@ func buildPopUpMenu(t baseTabs, button *widget.Button, items []*fyne.MenuItem) * popUpPos.X = buttonPos.X + buttonSize.Width - popUpMin.Width popUpPos.Y = buttonPos.Y - popUpMin.Height } + if popUpPos.X < 0 { + popUpPos.X = 0 + } + if popUpPos.Y < 0 { + popUpPos.Y = 0 + } popUpMenu.ShowAtPosition(popUpPos) return popUpMenu } From ef39289e9e77d42dfb6a5eb455c87fb064b88ec6 Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Tue, 28 Dec 2021 16:09:46 -0800 Subject: [PATCH 2/4] Fix the relicker/reset when scrolling doctabs Fixes #2708 --- container/doctabs.go | 6 ++++-- container/tabs.go | 13 ++++++++----- .../doctabs/desktop/tab_location_leading.xml | 1 + .../doctabs/desktop/tab_location_trailing.xml | 1 + 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/container/doctabs.go b/container/doctabs.go index 25dcbca16b..e3fb7d59c8 100644 --- a/container/doctabs.go +++ b/container/doctabs.go @@ -1,6 +1,8 @@ package container import ( + "image/color" + "fyne.io/fyne/v2" "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/layout" @@ -363,7 +365,7 @@ func (r *docTabsRenderer) scrollToSelected() { func (r *docTabsRenderer) updateIndicator(animate bool) { if r.docTabs.current < 0 { - r.indicator.Hide() + r.indicator.FillColor = color.Transparent r.indicator.Refresh() return } @@ -414,7 +416,7 @@ func (r *docTabsRenderer) updateIndicator(animate bool) { indicatorPos.Y = 0 } if indicatorSize.Width < 0 || indicatorSize.Height < 0 { - r.indicator.Hide() + r.indicator.FillColor = color.Transparent r.indicator.Refresh() return } diff --git a/container/tabs.go b/container/tabs.go index 67dacd425d..f2fc7b83a8 100644 --- a/container/tabs.go +++ b/container/tabs.go @@ -208,9 +208,10 @@ func setItems(t baseTabs, items []*TabItem) { type baseTabsRenderer struct { positionAnimation, sizeAnimation *fyne.Animation - lastIndicatorMutex sync.RWMutex - lastIndicatorPos fyne.Position - lastIndicatorSize fyne.Size + lastIndicatorMutex sync.RWMutex + lastIndicatorPos fyne.Position + lastIndicatorSize fyne.Size + lastIndicatorHidden bool action *widget.Button bar *fyne.Container @@ -307,7 +308,8 @@ func (r *baseTabsRenderer) minSize(t baseTabs) fyne.Size { func (r *baseTabsRenderer) moveIndicator(pos fyne.Position, siz fyne.Size, animate bool) { r.lastIndicatorMutex.RLock() - isSameState := r.lastIndicatorPos.Subtract(pos).IsZero() && r.lastIndicatorSize.Subtract(siz).IsZero() + isSameState := r.lastIndicatorPos.Subtract(pos).IsZero() && r.lastIndicatorSize.Subtract(siz).IsZero() && + r.lastIndicatorHidden == r.indicator.Hidden r.lastIndicatorMutex.RUnlock() if isSameState { return @@ -322,7 +324,7 @@ func (r *baseTabsRenderer) moveIndicator(pos fyne.Position, siz fyne.Size, anima r.sizeAnimation = nil } - r.indicator.Show() + r.indicator.FillColor = theme.PrimaryColor() if r.indicator.Position().IsZero() { r.indicator.Move(pos) r.indicator.Resize(siz) @@ -333,6 +335,7 @@ func (r *baseTabsRenderer) moveIndicator(pos fyne.Position, siz fyne.Size, anima r.lastIndicatorMutex.Lock() r.lastIndicatorPos = pos r.lastIndicatorSize = siz + r.lastIndicatorHidden = r.indicator.Hidden r.lastIndicatorMutex.Unlock() if animate { diff --git a/container/testdata/doctabs/desktop/tab_location_leading.xml b/container/testdata/doctabs/desktop/tab_location_leading.xml index c014a403de..69a9bb7b0e 100644 --- a/container/testdata/doctabs/desktop/tab_location_leading.xml +++ b/container/testdata/doctabs/desktop/tab_location_leading.xml @@ -32,6 +32,7 @@ + Text 1 diff --git a/container/testdata/doctabs/desktop/tab_location_trailing.xml b/container/testdata/doctabs/desktop/tab_location_trailing.xml index 9524b6d1ab..a4e4d27096 100644 --- a/container/testdata/doctabs/desktop/tab_location_trailing.xml +++ b/container/testdata/doctabs/desktop/tab_location_trailing.xml @@ -32,6 +32,7 @@ + Text 1 From b233decc77eaa5ed7d0e27645915eef55f69e7ae Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Thu, 30 Dec 2021 16:56:13 -0800 Subject: [PATCH 3/4] Fix resetting when button is selected --- container/doctabs.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/container/doctabs.go b/container/doctabs.go index e3fb7d59c8..cd8df75663 100644 --- a/container/doctabs.go +++ b/container/doctabs.go @@ -64,7 +64,7 @@ func (t *DocTabs) CreateRenderer() fyne.WidgetRenderer { buttonCache: make(map[*TabItem]*tabButton), }, docTabs: t, - scroller: NewScroll(nil), + scroller: NewScroll(&fyne.Container{}), } r.action = r.buildAllTabsButton() r.create = r.buildCreateTabsButton() @@ -291,8 +291,8 @@ func (r *docTabsRenderer) buildCreateTabsButton() *widget.Button { return create } -func (r *docTabsRenderer) buildTabButtons(count int) *fyne.Container { - buttons := &fyne.Container{} +func (r *docTabsRenderer) buildTabButtons(count int, buttons *fyne.Container) { + buttons.Objects = nil var iconPos buttonIconPosition if fyne.CurrentDevice().IsMobile() { @@ -337,7 +337,6 @@ func (r *docTabsRenderer) buildTabButtons(count int) *fyne.Container { button.Refresh() buttons.Objects = append(buttons.Objects, button) } - return buttons } func (r *docTabsRenderer) scrollToSelected() { @@ -443,8 +442,7 @@ func (r *docTabsRenderer) updateCreateTab() { func (r *docTabsRenderer) updateTabs() { tabCount := len(r.docTabs.Items) - - r.scroller.Content = r.buildTabButtons(tabCount) + r.buildTabButtons(tabCount, r.scroller.Content.(*fyne.Container)) // Set layout of tab bar containing tab buttons and overflow action if r.docTabs.location == TabLocationLeading || r.docTabs.location == TabLocationTrailing { From 98700c396cfb07bde641fec93cc7456732d853af Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Fri, 31 Dec 2021 08:49:13 -0800 Subject: [PATCH 4/4] Re-add revised test output --- .../doctabs/desktop/dynamic_appended.xml | 4 ++-- .../desktop/dynamic_appended_and_removed.xml | 6 +++--- .../testdata/doctabs/mobile/dynamic_appended.xml | 16 ++++++++-------- .../mobile/dynamic_appended_and_removed.xml | 10 +++++----- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/container/testdata/doctabs/desktop/dynamic_appended.xml b/container/testdata/doctabs/desktop/dynamic_appended.xml index 40021bce33..227549c461 100644 --- a/container/testdata/doctabs/desktop/dynamic_appended.xml +++ b/container/testdata/doctabs/desktop/dynamic_appended.xml @@ -7,8 +7,8 @@ Test1 - - Test2 + + Test2 diff --git a/container/testdata/doctabs/desktop/dynamic_appended_and_removed.xml b/container/testdata/doctabs/desktop/dynamic_appended_and_removed.xml index 7fffa1ad7a..918901ff91 100644 --- a/container/testdata/doctabs/desktop/dynamic_appended_and_removed.xml +++ b/container/testdata/doctabs/desktop/dynamic_appended_and_removed.xml @@ -4,8 +4,8 @@ - - Test2 + + Test2 @@ -18,7 +18,7 @@ - + Text 2 diff --git a/container/testdata/doctabs/mobile/dynamic_appended.xml b/container/testdata/doctabs/mobile/dynamic_appended.xml index a3e5cdf522..261bd4343c 100644 --- a/container/testdata/doctabs/mobile/dynamic_appended.xml +++ b/container/testdata/doctabs/mobile/dynamic_appended.xml @@ -4,16 +4,16 @@ - - Test1 - + + Test1 + - - Test2 - - + + Test2 + + @@ -27,7 +27,7 @@ - + Text 1 diff --git a/container/testdata/doctabs/mobile/dynamic_appended_and_removed.xml b/container/testdata/doctabs/mobile/dynamic_appended_and_removed.xml index 02746daca4..0d2258573b 100644 --- a/container/testdata/doctabs/mobile/dynamic_appended_and_removed.xml +++ b/container/testdata/doctabs/mobile/dynamic_appended_and_removed.xml @@ -4,10 +4,10 @@ - - Test2 - - + + Test2 + + @@ -21,7 +21,7 @@ - + Text 2