diff --git a/io/input/pointer_test.go b/io/input/pointer_test.go index 8209de61..e5f1ed4c 100644 --- a/io/input/pointer_test.go +++ b/io/input/pointer_test.go @@ -19,6 +19,16 @@ import ( "gioui.org/op/clip" ) +func TestFilterReset(t *testing.T) { + r := new(Router) + if _, ok := r.Event(pointer.Filter{}); ok { + t.Fatal("empty filter matched reset event") + } + if _, ok := r.Event(pointer.Filter{Kinds: pointer.Cancel}); ok { + t.Fatal("second call to Event matched reset event") + } +} + func TestPointerNilTarget(t *testing.T) { r := new(Router) r.Event(pointer.Filter{Kinds: pointer.Press}) diff --git a/io/input/router.go b/io/input/router.go index 300b0f4b..b2a27822 100644 --- a/io/input/router.go +++ b/io/input/router.go @@ -255,7 +255,7 @@ func (q *Router) Event(filters ...event.Filter) (event.Event, bool) { break } h := q.stateFor(f.Target) - if reset, ok := h.pointer.ResetEvent(); ok { + if reset, ok := h.pointer.ResetEvent(); ok && h.filter.pointer.Matches(reset) { return reset, true } }