diff --git a/widget/tree.go b/widget/tree.go index 569130f89b..085977eedb 100644 --- a/widget/tree.go +++ b/widget/tree.go @@ -876,14 +876,14 @@ func (n *treeNode) Tapped(*fyne.PointEvent) { } n.tree.Select(n.uid) - if !fyne.CurrentDevice().IsMobile() { - canvas := fyne.CurrentApp().Driver().CanvasForObject(n.tree) - if canvas != nil { + canvas := fyne.CurrentApp().Driver().CanvasForObject(n.tree) + if canvas != nil && canvas.Focused() != n.tree { + n.tree.currentFocus = n.uid + if !fyne.CurrentDevice().IsMobile() { canvas.Focus(n.tree) } - n.tree.currentFocus = n.uid - n.Refresh() } + n.Refresh() } func (n *treeNode) partialRefresh() { diff --git a/widget/tree_internal_test.go b/widget/tree_internal_test.go index 5f99b008f5..512e62edc4 100644 --- a/widget/tree_internal_test.go +++ b/widget/tree_internal_test.go @@ -697,6 +697,7 @@ func TestTree_Tap(t *testing.T) { test.Tap(getBranch(t, tree, "A")) assert.True(t, selected, "Branch should have been selected") + assert.Equal(t, "A", tree.currentFocus) }) t.Run("BranchIcon", func(t *testing.T) { data := make(map[string][]string) @@ -725,6 +726,7 @@ func TestTree_Tap(t *testing.T) { } test.Tap(getLeaf(t, tree, "A")) assert.True(t, selected, "Leaf should have been selected") + assert.Equal(t, "A", tree.currentFocus) }) }