diff --git a/.gitignore b/.gitignore index ba7d439ad7..ddb80f5904 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,10 @@ cmd/fyne/fyne cmd/fyne_demo/fyne_demo cmd/fyne_settings/fyne_settings cmd/hello/hello +cmd/fyne/fyne.exe +cmd/fyne_demo/fyne_demo.exe +cmd/fyne_settings/fyne_settings.exe +cmd/hello/hello.exe ### Tests **/testdata/failed diff --git a/widget/tabcontainer.go b/widget/tabcontainer.go index c79af51596..8baff17042 100644 --- a/widget/tabcontainer.go +++ b/widget/tabcontainer.go @@ -128,6 +128,9 @@ func (c *TabContainer) RemoveIndex(index int) { // SetItems sets the container’s items and refreshes. func (c *TabContainer) SetItems(items []*TabItem) { c.Items = items + if l := len(c.Items); c.current >= l { + c.current = l - 1 + } c.Refresh() } @@ -146,7 +149,6 @@ func (c *TabContainer) SelectTabIndex(index int) { if index < 0 || index >= len(c.Items) || c.current == index { return } - c.current = index c.Refresh() @@ -360,6 +362,7 @@ func (r *tabContainerRenderer) buildTabBar(buttons []fyne.CanvasObject) *fyne.Co func (r *tabContainerRenderer) moveSelection() { if r.container.current < 0 { + r.underline.Hide() return } selected := r.tabBar.Objects[r.container.current] @@ -380,6 +383,7 @@ func (r *tabContainerRenderer) moveSelection() { underlinePos = fyne.NewPos(r.tabBar.Position().X-theme.Padding(), selected.Position().Y) underlineSize = fyne.NewSize(theme.Padding(), selected.Size().Height) } + r.underline.Show() r.underline.Resize(underlineSize) r.underline.Move(underlinePos) } diff --git a/widget/tabcontainer_test.go b/widget/tabcontainer_test.go index bb4d3adad9..56304f366b 100644 --- a/widget/tabcontainer_test.go +++ b/widget/tabcontainer_test.go @@ -98,3 +98,16 @@ func TestTabContainer_SelectTabIndex(t *testing.T) { assert.Equal(t, 1, tabs.CurrentTabIndex()) assert.Equal(t, tabs.Items[1], selectedTab) } + +func TestTabContainer_RemoveIndex(t *testing.T) { + tabs := widget.NewTabContainer(&widget.TabItem{Text: "Test1", Content: widget.NewLabel("Test1")}, + &widget.TabItem{Text: "Test2", Content: widget.NewLabel("Test2")}) + + tabs.SelectTabIndex(1) + tabs.RemoveIndex(1) + assert.Equal(t, 0, tabs.CurrentTabIndex()) // check max item selection and no panic + + tabs.SelectTabIndex(0) + tabs.RemoveIndex(0) + assert.Equal(t, -1, tabs.CurrentTabIndex()) // check deselection and no panic +}