forked from joejulian/gio
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 <mail@eliasnaur.com>
This commit is contained in:
@@ -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...)
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user