From 77ccc1ff41099c94ee1fbf6615bb1bf7e1524750 Mon Sep 17 00:00:00 2001 From: Chris Miller Date: Fri, 17 Apr 2020 02:12:37 +0000 Subject: [PATCH 1/4] Allow changing current node during handler Avoids wrong handler being called or even crash on nil --- treeview.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/treeview.go b/treeview.go index ddefa62..60748d3 100644 --- a/treeview.go +++ b/treeview.go @@ -681,12 +681,13 @@ func (t *TreeView) Draw(screen tcell.Screen) { func (t *TreeView) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive)) { return t.WrapInputHandler(func(event *tcell.EventKey, setFocus func(p Primitive)) { selectNode := func() { - if t.currentNode != nil { + node := t.currentNode + if node != nil { if t.selected != nil { - t.selected(t.currentNode) + t.selected(node) } - if t.currentNode.selected != nil { - t.currentNode.selected() + if node.selected != nil { + node.selected() } } } From 7b79cb6347c8fdecad2d233f29eca9476614f773 Mon Sep 17 00:00:00 2001 From: Chris Miller Date: Fri, 17 Apr 2020 02:15:53 +0000 Subject: [PATCH 2/4] Allow changing current node during handler --- treeview.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/treeview.go b/treeview.go index 60748d3..6e43477 100644 --- a/treeview.go +++ b/treeview.go @@ -747,13 +747,14 @@ func (t *TreeView) MouseHandler() func(action MouseAction, event *tcell.EventMou if y >= 0 && y < len(t.nodes) { node := t.nodes[y] if node.selectable { - if t.currentNode != node && t.changed != nil { + previousNode := t.currentNode + t.currentNode = node + if previousNode != node && t.changed != nil { t.changed(node) } if t.selected != nil { t.selected(node) } - t.currentNode = node } } consumed = true From 089ac467f881a0f21b0161b5aba54f5d1ee148a0 Mon Sep 17 00:00:00 2001 From: Chris Miller Date: Fri, 17 Apr 2020 02:16:20 +0000 Subject: [PATCH 3/4] Allow changing focus in handler --- treeview.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/treeview.go b/treeview.go index 6e43477..4e0e3f5 100644 --- a/treeview.go +++ b/treeview.go @@ -742,6 +742,7 @@ func (t *TreeView) MouseHandler() func(action MouseAction, event *tcell.EventMou switch action { case MouseLeftClick: + setFocus(t) _, rectY, _, _ := t.GetInnerRect() y -= rectY if y >= 0 && y < len(t.nodes) { @@ -758,7 +759,6 @@ func (t *TreeView) MouseHandler() func(action MouseAction, event *tcell.EventMou } } consumed = true - setFocus(t) case MouseScrollUp: t.movement = treeUp consumed = true From 591e235272defa4e79ca28c54e07b94b48c39041 Mon Sep 17 00:00:00 2001 From: Chris Miller Date: Wed, 29 Apr 2020 01:18:31 +0000 Subject: [PATCH 4/4] Also call node.selected on node click --- treeview.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/treeview.go b/treeview.go index 4e0e3f5..ea4585a 100644 --- a/treeview.go +++ b/treeview.go @@ -756,6 +756,9 @@ func (t *TreeView) MouseHandler() func(action MouseAction, event *tcell.EventMou if t.selected != nil { t.selected(node) } + if node.selected != nil { + node.selected() + } } } consumed = true