From cd0c9dab9fcd2dd70f9f900f480473879d16f683 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Thu, 31 Mar 2022 11:41:42 +0200 Subject: [PATCH] io/router: [API] don't emit Enter and Leave events for touch input Enter/Leave events make sense for mouse pointers, to track hover status. It doesn't make sense to track hover for touch input, so this change stops pointer.Enter and pointer.Leave from being emitted for pointer.Touch sources. Signed-off-by: Elias Naur --- io/router/pointer.go | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/io/router/pointer.go b/io/router/pointer.go index 384c577f..8ac71456 100644 --- a/io/router/pointer.go +++ b/io/router/pointer.go @@ -733,30 +733,32 @@ func (q *pointerQueue) deliverEnterLeaveEvents(p *pointerInfo, events *handlerEv p.handlers = append(p.handlers[:0], hits...) } } - // Deliver Leave events. - for _, k := range p.entered { - if _, found := searchTag(hits, k); found { - continue - } - h := q.handlers[k] - e.Type = pointer.Leave + if e.Source == pointer.Mouse { + // Deliver Leave events. + for _, k := range p.entered { + if _, found := searchTag(hits, k); found { + continue + } + h := q.handlers[k] + e.Type = pointer.Leave - if e.Type&h.types != 0 { - e.Position = q.invTransform(h.area, e.Position) - events.Add(k, e) + if e.Type&h.types != 0 { + e.Position = q.invTransform(h.area, e.Position) + events.Add(k, e) + } } - } - // Deliver Enter events. - for _, k := range hits { - h := q.handlers[k] - if _, found := searchTag(p.entered, k); found { - continue - } - e.Type = pointer.Enter + // Deliver Enter events. + for _, k := range hits { + h := q.handlers[k] + if _, found := searchTag(p.entered, k); found { + continue + } + e.Type = pointer.Enter - if e.Type&h.types != 0 { - e.Position = q.invTransform(h.area, e.Position) - events.Add(k, e) + if e.Type&h.types != 0 { + e.Position = q.invTransform(h.area, e.Position) + events.Add(k, e) + } } } p.entered = append(p.entered[:0], hits...)