From eda2b575f06e72040ebf82d24a7ec1ac84b7948c Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Mon, 9 Apr 2018 23:45:54 +0300 Subject: Refactor UI to use interfaces everywhere --- ui/view-main.go | 78 +++++++++++++++++++++++---------------------------------- 1 file changed, 32 insertions(+), 46 deletions(-) (limited to 'ui/view-main.go') diff --git a/ui/view-main.go b/ui/view-main.go index fd05492..b3b5b82 100644 --- a/ui/view-main.go +++ b/ui/view-main.go @@ -27,12 +27,11 @@ import ( "github.com/mattn/go-runewidth" "maunium.net/go/gomatrix" "maunium.net/go/gomuks/config" + "maunium.net/go/gomuks/debug" "maunium.net/go/gomuks/interface" "maunium.net/go/gomuks/matrix/pushrules" "maunium.net/go/gomuks/matrix/rooms" "maunium.net/go/gomuks/notification" - "maunium.net/go/gomuks/ui/debug" - "maunium.net/go/gomuks/ui/types" "maunium.net/go/gomuks/ui/widget" "maunium.net/go/tview" ) @@ -40,9 +39,9 @@ import ( type MainView struct { *tview.Flex - roomList *widget.RoomList + roomList *RoomList roomView *tview.Pages - rooms map[string]*widget.RoomView + rooms map[string]*RoomView currentRoomIndex int roomIDs []string @@ -57,9 +56,9 @@ type MainView struct { func (ui *GomuksUI) NewMainView() tview.Primitive { mainView := &MainView{ Flex: tview.NewFlex(), - roomList: widget.NewRoomList(), + roomList: NewRoomList(), roomView: tview.NewPages(), - rooms: make(map[string]*widget.RoomView), + rooms: make(map[string]*RoomView), matrix: ui.gmx.Matrix(), gmx: ui.gmx, @@ -81,7 +80,7 @@ func (view *MainView) BumpFocus() { view.lastFocusTime = time.Now() } -func (view *MainView) InputChanged(roomView *widget.RoomView, text string) { +func (view *MainView) InputChanged(roomView *RoomView, text string) { if len(text) == 0 { go view.matrix.SendTyping(roomView.Room.ID, false) } else if text[0] != '/' { @@ -101,7 +100,7 @@ func findWordToTabComplete(text string) string { return output } -func (view *MainView) InputTabComplete(roomView *widget.RoomView, text string, cursorOffset int) string { +func (view *MainView) InputTabComplete(roomView *RoomView, text string, cursorOffset int) string { str := runewidth.Truncate(text, cursorOffset, "") word := findWordToTabComplete(str) userCompletions := roomView.AutocompleteUser(word) @@ -118,7 +117,7 @@ func (view *MainView) InputTabComplete(roomView *widget.RoomView, text string, c return text } -func (view *MainView) InputSubmit(roomView *widget.RoomView, text string) { +func (view *MainView) InputSubmit(roomView *RoomView, text string) { if len(text) == 0 { return } else if text[0] == '/' { @@ -132,23 +131,23 @@ func (view *MainView) InputSubmit(roomView *widget.RoomView, text string) { roomView.SetInputText("") } -func (view *MainView) SendMessage(roomView *widget.RoomView, text string) { +func (view *MainView) SendMessage(roomView *RoomView, text string) { tempMessage := roomView.NewTempMessage("m.text", text) go view.sendTempMessage(roomView, tempMessage) } -func (view *MainView) sendTempMessage(roomView *widget.RoomView, tempMessage *types.Message) { +func (view *MainView) sendTempMessage(roomView *RoomView, tempMessage ifc.Message) { defer view.gmx.Recover() - eventID, err := view.matrix.SendMessage(roomView.Room.ID, tempMessage.Type, tempMessage.Text) + eventID, err := view.matrix.SendMessage(roomView.Room.ID, tempMessage.Type(), tempMessage.Text()) if err != nil { - tempMessage.State = types.MessageStateFailed + tempMessage.SetState(ifc.MessageStateFailed) roomView.SetStatus(fmt.Sprintf("Failed to send message: %s", err)) } else { roomView.MessageView().UpdateMessageID(tempMessage, eventID) } } -func (view *MainView) HandleCommand(roomView *widget.RoomView, command string, args []string) { +func (view *MainView) HandleCommand(roomView *RoomView, command string, args []string) { defer view.gmx.Recover() debug.Print("Handling command", command, args) switch command { @@ -169,16 +168,16 @@ func (view *MainView) HandleCommand(roomView *widget.RoomView, command string, a debug.Print("Leave room result:", view.matrix.LeaveRoom(roomView.Room.ID)) case "/join": if len(args) == 0 { - view.AddServiceMessage(roomView, "Usage: /join ") + roomView.AddServiceMessage("Usage: /join ") break } debug.Print("Join room result:", view.matrix.JoinRoom(args[0])) default: - view.AddServiceMessage(roomView, "Unknown command.") + roomView.AddServiceMessage("Unknown command.") } } -func (view *MainView) KeyEventHandler(roomView *widget.RoomView, key *tcell.EventKey) *tcell.EventKey { +func (view *MainView) KeyEventHandler(roomView *RoomView, key *tcell.EventKey) *tcell.EventKey { view.BumpFocus() k := key.Key() @@ -220,7 +219,7 @@ func (view *MainView) KeyEventHandler(roomView *widget.RoomView, key *tcell.Even const WheelScrollOffsetDiff = 3 -func (view *MainView) MouseEventHandler(roomView *widget.RoomView, event *tcell.EventMouse) *tcell.EventMouse { +func (view *MainView) MouseEventHandler(roomView *RoomView, event *tcell.EventMouse) *tcell.EventMouse { if event.Buttons() == tcell.ButtonNone { return event } @@ -300,7 +299,7 @@ func (view *MainView) addRoom(index int, room string) { view.roomList.Add(roomStore) if !view.roomView.HasPage(room) { - roomView := widget.NewRoomView(roomStore). + roomView := NewRoomView(roomStore). SetInputSubmitFunc(view.InputSubmit). SetInputChangedFunc(view.InputChanged). SetTabCompleteFunc(view.InputTabComplete). @@ -319,7 +318,7 @@ func (view *MainView) addRoom(index int, room string) { } } -func (view *MainView) GetRoom(id string) *widget.RoomView { +func (view *MainView) GetRoom(id string) ifc.RoomView { return view.rooms[id] } @@ -352,7 +351,7 @@ func (view *MainView) RemoveRoom(room string) { } else { removeIndex = sort.StringSlice(view.roomIDs).Search(room) } - view.roomList.Remove(roomView.Room) + view.roomList.Remove(roomView.MxRoom()) view.roomIDs = append(view.roomIDs[:removeIndex], view.roomIDs[removeIndex+1:]...) view.roomView.RemovePage(room) delete(view.rooms, room) @@ -363,7 +362,7 @@ func (view *MainView) SetRooms(rooms []string) { view.roomIDs = rooms view.roomList.Clear() view.roomView.Clear() - view.rooms = make(map[string]*widget.RoomView) + view.rooms = make(map[string]*RoomView) for index, room := range rooms { view.addRoom(index, room) } @@ -385,14 +384,14 @@ func sendNotification(room *rooms.Room, sender, text string, critical, sound boo notification.Send(sender, text, critical, sound) } -func (view *MainView) NotifyMessage(room *rooms.Room, message *types.Message, should pushrules.PushActionArrayShould) { +func (view *MainView) NotifyMessage(room *rooms.Room, message ifc.Message, should pushrules.PushActionArrayShould) { // Whether or not the room where the message came is the currently shown room. isCurrent := room.ID == view.CurrentRoomID() // Whether or not the terminal window is focused. isFocused := view.lastFocusTime.Add(30 * time.Second).Before(time.Now()) // Whether or not the push rules say this message should be notified about. - shouldNotify := (should.Notify || !should.NotifySpecified) && message.Sender != view.config.Session.UserID + shouldNotify := (should.Notify || !should.NotifySpecified) && message.Sender() != view.config.Session.UserID if !isCurrent { // The message is not in the current room, show new message status in room list. @@ -406,21 +405,10 @@ func (view *MainView) NotifyMessage(room *rooms.Room, message *types.Message, sh if shouldNotify && !isFocused { // Push rules say notify and the terminal is not focused, send desktop notification. shouldPlaySound := should.PlaySound && should.SoundName == "default" - sendNotification(room, message.Sender, message.Text, should.Highlight, shouldPlaySound) + sendNotification(room, message.Sender(), message.Text(), should.Highlight, shouldPlaySound) } - if should.Highlight { - // Message is highlight, set color. - message.TextColor = tcell.ColorYellow - } -} - -func (view *MainView) AddServiceMessage(roomView *widget.RoomView, text string) { - message := roomView.NewMessage("", "*", "gomuks.service", text, time.Now()) - message.TextColor = tcell.ColorGray - message.SenderColor = tcell.ColorGray - roomView.AddMessage(message, widget.AppendMessage) - view.parent.Render() + message.SetIsHighlight(should.Highlight) } func (view *MainView) LoadHistory(room string, initial bool) { @@ -452,20 +440,20 @@ func (view *MainView) LoadHistory(room string, initial bool) { } history, prevBatch, err := view.matrix.GetHistory(roomView.Room.ID, batch, 50) if err != nil { - view.AddServiceMessage(roomView, "Failed to fetch history") + roomView.AddServiceMessage("Failed to fetch history") debug.Print("Failed to fetch history for", roomView.Room.ID, err) return } roomView.Room.PrevBatch = prevBatch for _, evt := range history { - var message *types.Message + var message ifc.Message if evt.Type == "m.room.message" { message = view.ProcessMessageEvent(roomView, &evt) } else if evt.Type == "m.room.member" { message = view.ProcessMembershipEvent(roomView, &evt) } if message != nil { - roomView.AddMessage(message, widget.PrependMessage) + roomView.AddMessage(message, ifc.PrependMessage) } } err = roomView.SaveHistory(view.config.HistoryDir) @@ -476,7 +464,7 @@ func (view *MainView) LoadHistory(room string, initial bool) { view.parent.Render() } -func (view *MainView) ProcessMessageEvent(room *widget.RoomView, evt *gomatrix.Event) (message *types.Message) { +func (view *MainView) ProcessMessageEvent(room ifc.RoomView, evt *gomatrix.Event) ifc.Message { text, _ := evt.Content["body"].(string) msgtype, _ := evt.Content["msgtype"].(string) return room.NewMessage(evt.ID, evt.Sender, msgtype, text, unixToTime(evt.Timestamp)) @@ -519,14 +507,12 @@ func (view *MainView) getMembershipEventContent(evt *gomatrix.Event) (sender, te return } -func (view *MainView) ProcessMembershipEvent(room *widget.RoomView, evt *gomatrix.Event) (message *types.Message) { +func (view *MainView) ProcessMembershipEvent(room ifc.RoomView, evt *gomatrix.Event) ifc.Message { sender, text := view.getMembershipEventContent(evt) if len(text) == 0 { - return + return nil } - message = room.NewMessage(evt.ID, sender, "m.room.member", text, unixToTime(evt.Timestamp)) - message.TextColor = tcell.ColorGreen - return + return room.NewMessage(evt.ID, sender, "m.room.member", text, unixToTime(evt.Timestamp)) } func unixToTime(unix int64) time.Time { -- cgit v1.2.3 From 8270bc0322ac262f4b48c92d5fad25cf9634f1bb Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Tue, 10 Apr 2018 19:31:28 +0300 Subject: Move event parsing to ui/messages and add image displaying --- ui/view-main.go | 67 ++++----------------------------------------------------- 1 file changed, 4 insertions(+), 63 deletions(-) (limited to 'ui/view-main.go') diff --git a/ui/view-main.go b/ui/view-main.go index b3b5b82..a97f9b2 100644 --- a/ui/view-main.go +++ b/ui/view-main.go @@ -32,6 +32,7 @@ import ( "maunium.net/go/gomuks/matrix/pushrules" "maunium.net/go/gomuks/matrix/rooms" "maunium.net/go/gomuks/notification" + "maunium.net/go/gomuks/ui/messages" "maunium.net/go/gomuks/ui/widget" "maunium.net/go/tview" ) @@ -446,12 +447,7 @@ func (view *MainView) LoadHistory(room string, initial bool) { } roomView.Room.PrevBatch = prevBatch for _, evt := range history { - var message ifc.Message - if evt.Type == "m.room.message" { - message = view.ProcessMessageEvent(roomView, &evt) - } else if evt.Type == "m.room.member" { - message = view.ProcessMembershipEvent(roomView, &evt) - } + message := view.ParseEvent(roomView, &evt) if message != nil { roomView.AddMessage(message, ifc.PrependMessage) } @@ -464,61 +460,6 @@ func (view *MainView) LoadHistory(room string, initial bool) { view.parent.Render() } -func (view *MainView) ProcessMessageEvent(room ifc.RoomView, evt *gomatrix.Event) ifc.Message { - text, _ := evt.Content["body"].(string) - msgtype, _ := evt.Content["msgtype"].(string) - return room.NewMessage(evt.ID, evt.Sender, msgtype, text, unixToTime(evt.Timestamp)) -} - -func (view *MainView) getMembershipEventContent(evt *gomatrix.Event) (sender, text string) { - membership, _ := evt.Content["membership"].(string) - displayname, _ := evt.Content["displayname"].(string) - if len(displayname) == 0 { - displayname = *evt.StateKey - } - prevMembership := "leave" - prevDisplayname := "" - if evt.Unsigned.PrevContent != nil { - prevMembership, _ = evt.Unsigned.PrevContent["membership"].(string) - prevDisplayname, _ = evt.Unsigned.PrevContent["displayname"].(string) - } - - if membership != prevMembership { - switch membership { - case "invite": - sender = "---" - text = fmt.Sprintf("%s invited %s.", evt.Sender, displayname) - case "join": - sender = "-->" - text = fmt.Sprintf("%s joined the room.", displayname) - case "leave": - sender = "<--" - if evt.Sender != *evt.StateKey { - reason, _ := evt.Content["reason"].(string) - text = fmt.Sprintf("%s kicked %s: %s", evt.Sender, displayname, reason) - } else { - text = fmt.Sprintf("%s left the room.", displayname) - } - } - } else if displayname != prevDisplayname { - sender = "---" - text = fmt.Sprintf("%s changed their display name to %s.", prevDisplayname, displayname) - } - return -} - -func (view *MainView) ProcessMembershipEvent(room ifc.RoomView, evt *gomatrix.Event) ifc.Message { - sender, text := view.getMembershipEventContent(evt) - if len(text) == 0 { - return nil - } - return room.NewMessage(evt.ID, sender, "m.room.member", text, unixToTime(evt.Timestamp)) -} - -func unixToTime(unix int64) time.Time { - timestamp := time.Now() - if unix != 0 { - timestamp = time.Unix(unix/1000, unix%1000*1000) - } - return timestamp +func (view *MainView) ParseEvent(roomView ifc.RoomView, evt *gomatrix.Event) ifc.Message { + return messages.ParseEvent(view.matrix, roomView.MxRoom(), evt) } -- cgit v1.2.3 From c0705b02a08bc9054ab8dca0363248bf72896b3d Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Wed, 11 Apr 2018 15:05:42 +0300 Subject: Move notification package to lib/ and add open package --- ui/view-main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ui/view-main.go') diff --git a/ui/view-main.go b/ui/view-main.go index a97f9b2..3a6c38d 100644 --- a/ui/view-main.go +++ b/ui/view-main.go @@ -29,9 +29,9 @@ import ( "maunium.net/go/gomuks/config" "maunium.net/go/gomuks/debug" "maunium.net/go/gomuks/interface" + "maunium.net/go/gomuks/lib/notification" "maunium.net/go/gomuks/matrix/pushrules" "maunium.net/go/gomuks/matrix/rooms" - "maunium.net/go/gomuks/notification" "maunium.net/go/gomuks/ui/messages" "maunium.net/go/gomuks/ui/widget" "maunium.net/go/tview" -- cgit v1.2.3 From ff7ee333a1028850337aa332532cbc23c7bdde14 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Wed, 11 Apr 2018 17:57:15 +0300 Subject: Rename UIString to TString, move ansimage to lib/ and switch to tcell fork --- ui/view-main.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'ui/view-main.go') diff --git a/ui/view-main.go b/ui/view-main.go index 3a6c38d..056f8a0 100644 --- a/ui/view-main.go +++ b/ui/view-main.go @@ -23,7 +23,7 @@ import ( "time" "unicode" - "github.com/gdamore/tcell" + "maunium.net/go/tcell" "github.com/mattn/go-runewidth" "maunium.net/go/gomatrix" "maunium.net/go/gomuks/config" @@ -230,6 +230,11 @@ func (view *MainView) MouseEventHandler(roomView *RoomView, event *tcell.EventMo x, y := event.Position() switch event.Buttons() { + case tcell.Button1: + mx, my, mw, mh := msgView.GetRect() + if x >= mx && y >= my && x < mx+mw && y < my+mh { + debug.Print("Message view clicked") + } case tcell.WheelUp: if msgView.IsAtTop() { go view.LoadHistory(roomView.Room.ID, false) -- cgit v1.2.3 From 92a2428865dfde80af6f9ffba0f59567b63230b6 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Wed, 11 Apr 2018 19:20:40 +0300 Subject: Allow clicking images and load images from cache --- ui/view-main.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'ui/view-main.go') diff --git a/ui/view-main.go b/ui/view-main.go index 056f8a0..b21b3f4 100644 --- a/ui/view-main.go +++ b/ui/view-main.go @@ -23,7 +23,6 @@ import ( "time" "unicode" - "maunium.net/go/tcell" "github.com/mattn/go-runewidth" "maunium.net/go/gomatrix" "maunium.net/go/gomuks/config" @@ -34,6 +33,7 @@ import ( "maunium.net/go/gomuks/matrix/rooms" "maunium.net/go/gomuks/ui/messages" "maunium.net/go/gomuks/ui/widget" + "maunium.net/go/tcell" "maunium.net/go/tview" ) @@ -221,7 +221,7 @@ func (view *MainView) KeyEventHandler(roomView *RoomView, key *tcell.EventKey) * const WheelScrollOffsetDiff = 3 func (view *MainView) MouseEventHandler(roomView *RoomView, event *tcell.EventMouse) *tcell.EventMouse { - if event.Buttons() == tcell.ButtonNone { + if event.Buttons() == tcell.ButtonNone || event.HasMotion() { return event } view.BumpFocus() @@ -230,11 +230,6 @@ func (view *MainView) MouseEventHandler(roomView *RoomView, event *tcell.EventMo x, y := event.Position() switch event.Buttons() { - case tcell.Button1: - mx, my, mw, mh := msgView.GetRect() - if x >= mx && y >= my && x < mx+mw && y < my+mh { - debug.Print("Message view clicked") - } case tcell.WheelUp: if msgView.IsAtTop() { go view.LoadHistory(roomView.Room.ID, false) @@ -252,7 +247,12 @@ func (view *MainView) MouseEventHandler(roomView *RoomView, event *tcell.EventMo roomView.Room.MarkRead() } default: - debug.Print("Mouse event received:", event.Buttons(), event.Modifiers(), x, y) + mx, my, mw, mh := msgView.GetRect() + if x >= mx && y >= my && x < mx+mw && y < my+mh { + msgView.HandleClick(x-mx, y-my, event.Buttons()) + } else { + debug.Print("Mouse event received:", event.Buttons(), event.Modifiers(), x, y) + } return event } @@ -315,7 +315,7 @@ func (view *MainView) addRoom(index int, room string) { view.roomView.AddPage(room, roomView, true, false) roomView.UpdateUserList() - count, err := roomView.LoadHistory(view.config.HistoryDir) + count, err := roomView.LoadHistory(view.gmx, view.config.HistoryDir) if err != nil { debug.Printf("Failed to load history of %s: %v", roomView.Room.GetTitle(), err) } else if count <= 0 { @@ -466,5 +466,5 @@ func (view *MainView) LoadHistory(room string, initial bool) { } func (view *MainView) ParseEvent(roomView ifc.RoomView, evt *gomatrix.Event) ifc.Message { - return messages.ParseEvent(view.matrix, roomView.MxRoom(), evt) + return messages.ParseEvent(view.gmx, roomView.MxRoom(), evt) } -- cgit v1.2.3 From 69c163cfe9d353060896403a3e844848d4fd54eb Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Fri, 13 Apr 2018 21:25:45 +0300 Subject: Unknown changes that possibly fix and/or break things --- ui/view-main.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'ui/view-main.go') diff --git a/ui/view-main.go b/ui/view-main.go index b21b3f4..e5850d3 100644 --- a/ui/view-main.go +++ b/ui/view-main.go @@ -134,12 +134,12 @@ func (view *MainView) InputSubmit(roomView *RoomView, text string) { func (view *MainView) SendMessage(roomView *RoomView, text string) { tempMessage := roomView.NewTempMessage("m.text", text) - go view.sendTempMessage(roomView, tempMessage) + go view.sendTempMessage(roomView, tempMessage, text) } -func (view *MainView) sendTempMessage(roomView *RoomView, tempMessage ifc.Message) { +func (view *MainView) sendTempMessage(roomView *RoomView, tempMessage ifc.Message, text string) { defer view.gmx.Recover() - eventID, err := view.matrix.SendMessage(roomView.Room.ID, tempMessage.Type(), tempMessage.Text()) + eventID, err := view.matrix.SendMessage(roomView.Room.ID, tempMessage.Type(), text) if err != nil { tempMessage.SetState(ifc.MessageStateFailed) roomView.SetStatus(fmt.Sprintf("Failed to send message: %s", err)) @@ -153,8 +153,9 @@ func (view *MainView) HandleCommand(roomView *RoomView, command string, args []s debug.Print("Handling command", command, args) switch command { case "/me": - tempMessage := roomView.NewTempMessage("m.emote", strings.Join(args, " ")) - go view.sendTempMessage(roomView, tempMessage) + text := strings.Join(args, " ") + tempMessage := roomView.NewTempMessage("m.emote", text) + go view.sendTempMessage(roomView, tempMessage, text) view.parent.Render() case "/quit": view.gmx.Stop() @@ -411,7 +412,7 @@ func (view *MainView) NotifyMessage(room *rooms.Room, message ifc.Message, shoul if shouldNotify && !isFocused { // Push rules say notify and the terminal is not focused, send desktop notification. shouldPlaySound := should.PlaySound && should.SoundName == "default" - sendNotification(room, message.Sender(), message.Text(), should.Highlight, shouldPlaySound) + sendNotification(room, message.Sender(), message.NotificationContent(), should.Highlight, shouldPlaySound) } message.SetIsHighlight(should.Highlight) -- cgit v1.2.3 From e7bf5bd59fc0a43172b6ab5b338e1d60bd4b3bbb Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sat, 14 Apr 2018 00:34:25 +0300 Subject: Add basic HTML rendering (ref #16) --- ui/view-main.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'ui/view-main.go') diff --git a/ui/view-main.go b/ui/view-main.go index e5850d3..ccb3cc1 100644 --- a/ui/view-main.go +++ b/ui/view-main.go @@ -164,9 +164,7 @@ func (view *MainView) HandleCommand(roomView *RoomView, command string, args []s view.gmx.Stop() case "/panic": panic("This is a test panic.") - case "/part": - fallthrough - case "/leave": + case "/part", "/leave": debug.Print("Leave room result:", view.matrix.LeaveRoom(roomView.Room.ID)) case "/join": if len(args) == 0 { -- cgit v1.2.3 From f5530ff99c62d0d97dfae352e922f8327ff418c1 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sat, 14 Apr 2018 11:50:18 +0300 Subject: Move message parsing to parser subpackage --- ui/view-main.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'ui/view-main.go') diff --git a/ui/view-main.go b/ui/view-main.go index ccb3cc1..50304fc 100644 --- a/ui/view-main.go +++ b/ui/view-main.go @@ -31,7 +31,7 @@ import ( "maunium.net/go/gomuks/lib/notification" "maunium.net/go/gomuks/matrix/pushrules" "maunium.net/go/gomuks/matrix/rooms" - "maunium.net/go/gomuks/ui/messages" + "maunium.net/go/gomuks/ui/messages/parser" "maunium.net/go/gomuks/ui/widget" "maunium.net/go/tcell" "maunium.net/go/tview" @@ -465,5 +465,5 @@ func (view *MainView) LoadHistory(room string, initial bool) { } func (view *MainView) ParseEvent(roomView ifc.RoomView, evt *gomatrix.Event) ifc.Message { - return messages.ParseEvent(view.gmx, roomView.MxRoom(), evt) + return parser.ParseEvent(view.gmx, roomView.MxRoom(), evt) } -- cgit v1.2.3 From d060d10615434c557373ee00ba009cc8b583e881 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sat, 14 Apr 2018 15:33:20 +0300 Subject: Allow clicking names to mention them --- ui/view-main.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'ui/view-main.go') diff --git a/ui/view-main.go b/ui/view-main.go index 50304fc..d4ffd39 100644 --- a/ui/view-main.go +++ b/ui/view-main.go @@ -248,7 +248,9 @@ func (view *MainView) MouseEventHandler(roomView *RoomView, event *tcell.EventMo default: mx, my, mw, mh := msgView.GetRect() if x >= mx && y >= my && x < mx+mw && y < my+mh { - msgView.HandleClick(x-mx, y-my, event.Buttons()) + if msgView.HandleClick(x-mx, y-my, event.Buttons()) { + view.parent.Render() + } } else { debug.Print("Mouse event received:", event.Buttons(), event.Modifiers(), x, y) } -- cgit v1.2.3