From 652f1ecd47c3f503ae80b159acdacc7b127ff6f3 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Mon, 8 Jun 2020 21:31:23 +0200 Subject: [PATCH] io/router: deliver Release before Leave Fixes a problem where a touch Release would signal gesture.Click that it had left just before click would complete. Signed-off-by: Elias Naur --- io/router/pointer.go | 4 +--- io/router/pointer_test.go | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) 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) {