io/router: deduplicate pointer handlers

When the same handler is added several times
and that handler sets pointer.Grabbed, it gets lost.

Signed-off-by: Pierre Curto <pierre.curto@gmail.com>
This commit is contained in:
Pierre Curto
2021-10-19 10:56:21 +02:00
committed by Elias Naur
parent e5d8a4b8d0
commit e6ed25bb1f
2 changed files with 43 additions and 1 deletions
+32
View File
@@ -114,6 +114,38 @@ func TestPointerGrab(t *testing.T) {
assertEventSequence(t, r.Events(handler3), pointer.Cancel)
}
func TestPointerGrabSameHandlerTwice(t *testing.T) {
handler1 := new(int)
handler2 := new(int)
var ops op.Ops
types := pointer.Press | pointer.Release
pointer.InputOp{Tag: handler1, Types: types, Grab: true}.Add(&ops)
pointer.InputOp{Tag: handler1, Types: types}.Add(&ops)
pointer.InputOp{Tag: handler2, Types: types}.Add(&ops)
var r Router
r.Frame(&ops)
r.Queue(
pointer.Event{
Type: pointer.Press,
Position: f32.Pt(50, 50),
},
)
assertEventSequence(t, r.Events(handler1), pointer.Cancel, pointer.Press)
assertEventSequence(t, r.Events(handler2), pointer.Cancel, pointer.Press)
r.Frame(&ops)
r.Queue(
pointer.Event{
Type: pointer.Release,
Position: f32.Pt(50, 50),
},
)
assertEventSequence(t, r.Events(handler1), pointer.Release)
assertEventSequence(t, r.Events(handler2), pointer.Cancel)
}
func TestPointerMove(t *testing.T) {
handler1 := new(int)
handler2 := new(int)