From c7e85e26f761fb58db6692649e259589cdf55cf0 Mon Sep 17 00:00:00 2001 From: vaxerski Date: Wed, 12 Jun 2024 16:49:26 +0200 Subject: seat: fixup touch event handling fixes #6353 --- src/protocols/core/Seat.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'src/protocols/core/Seat.cpp') diff --git a/src/protocols/core/Seat.cpp b/src/protocols/core/Seat.cpp index 8bf03909..331eb15e 100644 --- a/src/protocols/core/Seat.cpp +++ b/src/protocols/core/Seat.cpp @@ -25,37 +25,38 @@ void CWLTouchResource::sendDown(SP surface, uint32_t timeMs, if (!owner) return; - if (currentSurface) { - LOGM(WARN, "requested CWLTouchResource::sendDown without sendUp first."); - sendUp(timeMs, id); - } - ASSERT(surface->client() == owner->client()); currentSurface = surface; listeners.destroySurface = surface->events.destroy.registerListener([this, timeMs, id](std::any d) { sendUp(timeMs + 10 /* hack */, id); }); resource->sendDown(g_pSeatManager->nextSerial(owner.lock()), timeMs, surface->getResource().get(), id, wl_fixed_from_double(local.x), wl_fixed_from_double(local.y)); + + fingers++; } void CWLTouchResource::sendUp(uint32_t timeMs, int32_t id) { - if (!owner || !currentSurface) + if (!owner) return; resource->sendUp(g_pSeatManager->nextSerial(owner.lock()), timeMs, id); - currentSurface.reset(); - listeners.destroySurface.reset(); + fingers--; + if (fingers <= 0) { + currentSurface.reset(); + listeners.destroySurface.reset(); + fingers = 0; + } } void CWLTouchResource::sendMotion(uint32_t timeMs, int32_t id, const Vector2D& local) { - if (!owner || !currentSurface) + if (!owner) return; resource->sendMotion(timeMs, id, wl_fixed_from_double(local.x), wl_fixed_from_double(local.y)); } void CWLTouchResource::sendFrame() { - if (!owner || !currentSurface) + if (!owner) return; resource->sendFrame(); -- cgit v1.2.3