summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordelthas <delthas@dille.cc>2022-04-20 17:45:37 +0200
committerdelthas <delthas@dille.cc>2022-04-20 17:45:37 +0200
commit180940b653d1f9b46b164292e91a53aedd88d48d (patch)
treee3aa907deaabc8d441504203b820748c871d831b
parentScroll horizontal channel list with the mouse wheel (diff)
Enable clicking on a horizontal buffer to switch to it
This is inspired by a patch from mooff. This keeps the same click & drag behavior as for the vertical channel list.
-rw-r--r--app.go6
-rw-r--r--ui/buffers.go23
-rw-r--r--ui/ui.go4
3 files changed, 33 insertions, 0 deletions
diff --git a/app.go b/app.go
index f6326c6..1affe75 100644
--- a/app.go
+++ b/app.go
@@ -455,6 +455,8 @@ func (app *App) handleMouseEvent(ev *tcell.EventMouse) {
if ev.Buttons()&tcell.ButtonPrimary != 0 {
if x < app.win.ChannelWidth() {
app.win.ClickBuffer(y + app.win.ChannelOffset())
+ } else if app.win.ChannelWidth() == 0 && y == h-1 {
+ app.win.ClickBuffer(app.win.HorizontalBufferOffset(x))
} else if x > w-app.win.MemberWidth() {
app.win.ClickMember(y + app.win.MemberOffset())
}
@@ -464,6 +466,10 @@ func (app *App) handleMouseEvent(ev *tcell.EventMouse) {
if i := y + app.win.ChannelOffset(); i == app.win.ClickedBuffer() {
app.win.GoToBufferNo(i)
}
+ } else if app.win.ChannelWidth() == 0 && y == h-1 {
+ if i := app.win.HorizontalBufferOffset(x); i == app.win.ClickedBuffer() {
+ app.win.GoToBufferNo(i)
+ }
} else if x > w-app.win.MemberWidth() {
if i := y + app.win.MemberOffset(); i == app.win.ClickedMember() {
netID, target := app.win.CurrentBuffer()
diff --git a/ui/buffers.go b/ui/buffers.go
index 021ddb1..fa77414 100644
--- a/ui/buffers.go
+++ b/ui/buffers.go
@@ -593,6 +593,29 @@ func (bs *BufferList) DrawVerticalBufferList(screen tcell.Screen, x0, y0, width,
}
}
+func (bs *BufferList) HorizontalBufferOffset(x int, offset int) int {
+ for i, b := range bs.list[offset:] {
+ if i > 0 {
+ x--
+ if x < 0 {
+ return -1
+ }
+ }
+ if b.title == "" {
+ x -= stringWidth(b.netName)
+ } else {
+ x -= stringWidth(b.title)
+ }
+ if 0 < b.highlights {
+ x -= 2 + len(fmt.Sprintf("%d", b.highlights))
+ }
+ if x < 0 {
+ return offset + i
+ }
+ }
+ return -1
+}
+
func (bs *BufferList) DrawHorizontalBufferList(screen tcell.Screen, x0, y0, width int, offset *int) {
x := width
for i := len(bs.list) - 1; i >= 0; i-- {
diff --git a/ui/ui.go b/ui/ui.go
index 6a9979a..f3d232b 100644
--- a/ui/ui.go
+++ b/ui/ui.go
@@ -180,6 +180,10 @@ func (ui *UI) ScrollChannelDownBy(n int) {
ui.channelOffset += n
}
+func (ui *UI) HorizontalBufferOffset(x int) int {
+ return ui.bs.HorizontalBufferOffset(x, ui.channelOffset)
+}
+
func (ui *UI) ChannelOffset() int {
return ui.channelOffset
}