diff --git a/io/router/pointer.go b/io/router/pointer.go index 250b5338..49059951 100644 --- a/io/router/pointer.go +++ b/io/router/pointer.go @@ -245,6 +245,7 @@ func (q *pointerQueue) Push(e pointer.Event, events *handlerEvents) { } if e.Type == pointer.Release { + q.deliverEvent(p, events, e) p.pressed = false } q.scratch = q.scratch[:0] @@ -259,9 +260,6 @@ func (q *pointerQueue) Push(e pointer.Event, events *handlerEvents) { } q.deliverEnterLeaveEvents(p, q.scratch, events, e) - if e.Type == pointer.Release { - q.deliverEvent(p, events, e) - } if !p.pressed { p.handlers = append(p.handlers[:0], q.scratch...) } diff --git a/io/router/pointer_test.go b/io/router/pointer_test.go index 2cc6a4f3..03c78a22 100644 --- a/io/router/pointer_test.go +++ b/io/router/pointer_test.go @@ -232,7 +232,7 @@ func TestPointerEnterLeave(t *testing.T) { ) assertEventSequence(t, r.Events(handler1), pointer.Enter) // The second handler gets the release event because the press started inside it. - assertEventSequence(t, r.Events(handler2), pointer.Leave, pointer.Release) + assertEventSequence(t, r.Events(handler2), pointer.Release, pointer.Leave) } @@ -346,7 +346,7 @@ func TestPointerEnterLeaveNested(t *testing.T) { }, ) assertEventSequence(t, r.Events(handler1), pointer.Release) - assertEventSequence(t, r.Events(handler2), pointer.Leave, pointer.Release) + assertEventSequence(t, r.Events(handler2), pointer.Release, pointer.Leave) } func TestPointerActiveInputDisappears(t *testing.T) {