Fix tab refocus on remove

Previously removing a tab would always pop from the history of tabs.
This checks to see if the closing tab is the one selected, if it is then
we use the history, otherwise we only need to change the selected tab if
it was after (to the right of) the closing tab, in which case we just
decrement the selected index.
This commit is contained in:
Jeffas 2019-10-10 13:24:42 +01:00 committed by Drew DeVault
parent 2542c65af2
commit 03d182ca88

View file

@ -62,18 +62,20 @@ func (tabs *Tabs) invalidateChild(d Drawable) {
} }
func (tabs *Tabs) Remove(content Drawable) { func (tabs *Tabs) Remove(content Drawable) {
match := false indexToRemove := -1
for i, tab := range tabs.Tabs { for i, tab := range tabs.Tabs {
if tab.Content == content { if tab.Content == content {
tabs.Tabs = append(tabs.Tabs[:i], tabs.Tabs[i+1:]...) tabs.Tabs = append(tabs.Tabs[:i], tabs.Tabs[i+1:]...)
tabs.removeHistory(i) tabs.removeHistory(i)
match = true indexToRemove = i
break break
} }
} }
if !match { if indexToRemove < 0 {
return return
} }
// only pop the tab history if the closing tab is selected
if indexToRemove == tabs.Selected {
index, ok := tabs.popHistory() index, ok := tabs.popHistory()
if ok { if ok {
tabs.Select(index) tabs.Select(index)
@ -82,6 +84,10 @@ func (tabs *Tabs) Remove(content Drawable) {
interactive.Focus(true) interactive.Focus(true)
} }
} }
} else if indexToRemove < tabs.Selected {
// selected tab is now one to the left of where it was
tabs.Selected--
}
tabs.TabStrip.Invalidate() tabs.TabStrip.Invalidate()
} }