~eliasnaur/gio

96d6fd2791eb91e685b75e2bb30b6439259114ba — Elias Naur 9 months ago 65a4366
Revert "io/router: [API] don't emit Enter and Leave events for touch input"

This reverts commit cd0c9dab9fcd2dd70f9f900f480473879d16f683. It turns out
that Enter/Leave is important for cancelling press-then-release-outside
for clickables.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
1 files changed, 21 insertions(+), 23 deletions(-)

M io/router/pointer.go
M io/router/pointer.go => io/router/pointer.go +21 -23
@@ 770,32 770,30 @@ func (q *pointerQueue) deliverEnterLeaveEvents(p *pointerInfo, events *handlerEv
			p.handlers = append(p.handlers[:0], hits...)
		}
	}
	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
	// 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...)