mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-05 09:25:38 +00:00
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 {
|
if e.Type == pointer.Release {
|
||||||
|
q.deliverEvent(p, events, e)
|
||||||
p.pressed = false
|
p.pressed = false
|
||||||
}
|
}
|
||||||
q.scratch = q.scratch[:0]
|
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)
|
q.deliverEnterLeaveEvents(p, q.scratch, events, e)
|
||||||
|
|
||||||
if e.Type == pointer.Release {
|
|
||||||
q.deliverEvent(p, events, e)
|
|
||||||
}
|
|
||||||
if !p.pressed {
|
if !p.pressed {
|
||||||
p.handlers = append(p.handlers[:0], q.scratch...)
|
p.handlers = append(p.handlers[:0], q.scratch...)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -232,7 +232,7 @@ func TestPointerEnterLeave(t *testing.T) {
|
|||||||
)
|
)
|
||||||
assertEventSequence(t, r.Events(handler1), pointer.Enter)
|
assertEventSequence(t, r.Events(handler1), pointer.Enter)
|
||||||
// The second handler gets the release event because the press started inside it.
|
// 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(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) {
|
func TestPointerActiveInputDisappears(t *testing.T) {
|
||||||
|
|||||||
Reference in New Issue
Block a user