diff --git a/ui/view-main.go b/ui/view-main.go index de1110a..2ade735 100644 --- a/ui/view-main.go +++ b/ui/view-main.go @@ -217,6 +217,9 @@ func (view *MainView) OnMouseEvent(event mauview.MouseEvent) bool { if view.modal != nil { return view.modal.OnMouseEvent(event) } + if view.config.Preferences.DisplayMode == config.DisplayModeModern { + return view.rosterView.OnMouseEvent(event) + } if view.config.Preferences.HideRoomList { return view.roomView.OnMouseEvent(event) } diff --git a/ui/view-roster.go b/ui/view-roster.go index b0f112d..9bd96b5 100644 --- a/ui/view-roster.go +++ b/ui/view-roster.go @@ -116,6 +116,22 @@ func (rstr *RosterView) Last() *rooms.Room { return rstr.rooms[len(rstr.rooms)-1] } +func (rstr *RosterView) ScrollNext() { + if index := rstr.index(rstr.selected); index == -1 || index == len(rstr.rooms)-1 { + rstr.selected = rstr.First() + } else { + rstr.selected = rstr.rooms[index+1] + } +} + +func (rstr *RosterView) ScrollPrev() { + if index := rstr.index(rstr.selected); index < 1 { + rstr.selected = rstr.Last() + } else { + rstr.selected = rstr.rooms[index-1] + } +} + func (rstr *RosterView) Draw(screen mauview.Screen) { if rstr.focused { if roomView, ok := rstr.parent.getRoomView(rstr.selected.ID, true); ok { @@ -214,17 +230,9 @@ func (rstr *RosterView) OnKeyEvent(event mauview.KeyEvent) bool { switch rstr.parent.config.Keybindings.Roster[kb] { case "next_room": - if index := rstr.index(rstr.selected); index == -1 || index == len(rstr.rooms)-1 { - rstr.selected = rstr.First() - } else { - rstr.selected = rstr.rooms[index+1] - } + rstr.ScrollNext() case "prev_room": - if index := rstr.index(rstr.selected); index < 1 { - rstr.selected = rstr.Last() - } else { - rstr.selected = rstr.rooms[index-1] - } + rstr.ScrollPrev() case "clear": rstr.selected = nil case "quit": @@ -236,3 +244,26 @@ func (rstr *RosterView) OnKeyEvent(event mauview.KeyEvent) bool { } return true } + +func (rstr *RosterView) OnMouseEvent(event mauview.MouseEvent) bool { + if rstr.focused { + if roomView, ok := rstr.parent.getRoomView(rstr.selected.ID, true); ok { + return roomView.OnMouseEvent(event) + } + } + + if event.HasMotion() { + return false + } + + switch event.Buttons() { + case tcell.WheelUp: + rstr.ScrollPrev() + return true + case tcell.WheelDown: + rstr.ScrollNext() + return true + } + + return false +}