From f5aa745038324a238ca73da13d95bc4140c4c029 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Mon, 27 Nov 2023 19:33:16 -0600 Subject: [PATCH] io/input: discard pointer reset event if filter doesn't match New handlers receive reset events the first time Source.Event is called. However, in case the filter doesn't match a reset event it shouldn't be reported. Signed-off-by: Elias Naur --- io/input/pointer_test.go | 10 ++++++++++ io/input/router.go | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) 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 } }