about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--lib/ui/tab.go22
1 files changed, 14 insertions, 8 deletions
diff --git a/lib/ui/tab.go b/lib/ui/tab.go
index ef9fcd8..27fb604 100644
--- a/lib/ui/tab.go
+++ b/lib/ui/tab.go
@@ -62,25 +62,31 @@ func (tabs *Tabs) invalidateChild(d Drawable) {
 }
 
 func (tabs *Tabs) Remove(content Drawable) {
-	match := false
+	indexToRemove := -1
 	for i, tab := range tabs.Tabs {
 		if tab.Content == content {
 			tabs.Tabs = append(tabs.Tabs[:i], tabs.Tabs[i+1:]...)
 			tabs.removeHistory(i)
-			match = true
+			indexToRemove = i
 			break
 		}
 	}
-	if !match {
+	if indexToRemove < 0 {
 		return
 	}
-	index, ok := tabs.popHistory()
-	if ok {
-		tabs.Select(index)
-		interactive, ok := tabs.Tabs[tabs.Selected].Content.(Interactive)
+	// only pop the tab history if the closing tab is selected
+	if indexToRemove == tabs.Selected {
+		index, ok := tabs.popHistory()
 		if ok {
-			interactive.Focus(true)
+			tabs.Select(index)
+			interactive, ok := tabs.Tabs[tabs.Selected].Content.(Interactive)
+			if ok {
+				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()
 }