diff --git a/events.go b/events.go index f0a45da..9a25963 100644 --- a/events.go +++ b/events.go @@ -99,10 +99,8 @@ func crtTermboxEvt(e termbox.Event) Event { ne.Path = "/sys/err" ne.Data = err case termbox.EventMouse: - m := EvtMouse{} - m.X = e.MouseX - m.Y = e.MouseY - ne.Path = "/sys/mouse" + m := evtMouse(e) + ne.Path = "/sys/mouse/" + m.Press ne.Data = m } return ne @@ -116,9 +114,40 @@ type EvtWnd struct { type EvtMouse struct { X int Y int + Drag bool Press string } +func evtMouse(e termbox.Event) EvtMouse { + em := EvtMouse{} + em.X = e.MouseX + em.Y = e.MouseY + + if e.Mod == termbox.ModMotion { + em.Drag = true + } + + switch e.Key { + case termbox.MouseLeft: + em.Press = "left" + case termbox.MouseMiddle: + em.Press = "middle" + case termbox.MouseRight: + em.Press = "right" + + case termbox.MouseRelease: + em.Press = "release" + + case termbox.MouseWheelUp: + em.Press = "wheel/up" + case termbox.MouseWheelDown: + em.Press = "wheel/down" + + } + + return em +} + type EvtErr error func hookTermboxEvt() { @@ -126,7 +155,7 @@ func hookTermboxEvt() { e := termbox.PollEvent() for _, c := range sysEvtChs { - func(ch chan Event) { + go func(ch chan Event) { ch <- crtTermboxEvt(e) }(c) } @@ -244,7 +273,7 @@ func (es *EvtStream) Loop() { case "/sig/stoploop": return } - func(a Event) { + go func(a Event) { es.RLock() defer es.RUnlock() if pattern := es.match(a.Path); pattern != "" { @@ -274,10 +303,6 @@ func Handle(path string, handler func(Event)) { DefaultEvtStream.Handle(path, handler) } -func ResetHandlers() { - DefaultEvtStream.ResetHandlers() -} - func Loop() { DefaultEvtStream.Loop() }