summary refs log tree commit diff stats
path: root/lib/ui/tab.go
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ui/tab.go')
-rw-r--r--lib/ui/tab.go28
1 files changed, 28 insertions, 0 deletions
diff --git a/lib/ui/tab.go b/lib/ui/tab.go
index 61d544a..0061472 100644
--- a/lib/ui/tab.go
+++ b/lib/ui/tab.go
@@ -126,6 +126,19 @@ func (tabs *Tabs) removeHistory(index int) {
 	tabs.history = newHist
 }
 
+func (tabs *Tabs) MouseEvent(event tcell.Event) {
+	switch event := event.(type) {
+	case *tcell.EventMouse:
+		if event.Buttons()&tcell.Button1 != 0 {
+			x, y := event.Position()
+			selectedTab, ok := tabs.TabStrip.Clicked(x, y)
+			if ok {
+				tabs.Select(selectedTab)
+			}
+		}
+	}
+}
+
 // TODO: Color repository
 func (strip *TabStrip) Draw(ctx *Context) {
 	x := 0
@@ -151,6 +164,21 @@ func (strip *TabStrip) OnInvalidate(onInvalidate func(d Drawable)) {
 	strip.onInvalidateStrip = onInvalidate
 }
 
+func (strip *TabStrip) Clicked(mouseX int, mouseY int) (int, bool) {
+	x := 0
+	if mouseY == 0 {
+		for i, tab := range strip.Tabs {
+			trunc := runewidth.Truncate(tab.Name, 32, "…")
+			length := len(trunc) + 2
+			if x <= mouseX && mouseX < x+length {
+				return i, true
+			}
+			x += length
+		}
+	}
+	return 0, false
+}
+
 func (content *TabContent) Children() []Drawable {
 	children := make([]Drawable, len(content.Tabs))
 	for i, tab := range content.Tabs {