From d7feb56cbe7b81160b580ec2f5dcaef78c7a2230 Mon Sep 17 00:00:00 2001 From: Moritz Poldrack Date: Tue, 5 Jul 2022 20:23:40 +0200 Subject: fix panic on closing a tab This change fixes a panic caused by the selected tab being out of sync when selecting a new one in widgets.(*Aerc).SelectedTab(). This happens if the tab is already removed from the list of tabs, but the selection not yet being updated. This was achieved by moving the tabs behind updating the selection. Signed-off-by: Moritz Poldrack Acked-by: Tim Culverhouse --- lib/ui/tab.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'lib/ui') diff --git a/lib/ui/tab.go b/lib/ui/tab.go index a67bdabc..3be512f7 100644 --- a/lib/ui/tab.go +++ b/lib/ui/tab.go @@ -74,10 +74,13 @@ func (tabs *Tabs) invalidateChild(d Drawable) { func (tabs *Tabs) Remove(content Drawable) { indexToRemove := -1 + removeTab := func() {} for i, tab := range tabs.Tabs { if tab.Content == content { - tabs.Tabs = append(tabs.Tabs[:i], tabs.Tabs[i+1:]...) - tabs.removeHistory(i) + removeTab = func() { + tabs.Tabs = append(tabs.Tabs[:i], tabs.Tabs[i+1:]...) + tabs.removeHistory(i) + } indexToRemove = i break } @@ -99,6 +102,7 @@ func (tabs *Tabs) Remove(content Drawable) { // selected tab is now one to the left of where it was tabs.Selected-- } + removeTab() tabs.TabStrip.Invalidate() } -- cgit