aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@theqtcompany.com>2016-08-05 14:56:56 +0200
committerFrederik Gladhorn <frederik.gladhorn@qt.io>2016-08-08 10:24:02 +0000
commit076640e0e7ac31574c41bd6298a89b0cb5d7f9a7 (patch)
tree9866c1887f28a0b84b5f0eae170240d0f7036103
parent72e6195925f5390670d78f115a405971162cb4eb (diff)
Handle press events without release gracefully
In the old code, touch point grabbers would be ignored in case of a press without release for a point. To make sure not to break existing bad test code or clash with broken devices, warn, but reset the grabber for new press events. Change-Id: Ia76ed4d3ee32c983c451f760837e83f8d90dab41 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
-rw-r--r--src/quick/items/qquickevents.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/quick/items/qquickevents.cpp b/src/quick/items/qquickevents.cpp
index bc9e5d0ad2..59faafa023 100644
--- a/src/quick/items/qquickevents.cpp
+++ b/src/quick/items/qquickevents.cpp
@@ -624,7 +624,13 @@ QQuickPointerEvent *QQuickPointerTouchEvent::reset(QEvent *event)
for (int i = 0; i < newPointCount; ++i) {
auto point = m_touchPoints.at(i);
point->reset(tps.at(i), ev->timestamp());
- point->setGrabber(grabbers.at(i));
+ if (point->state() == QQuickEventPoint::Pressed) {
+ if (grabbers.at(i))
+ qWarning() << "TouchPointPressed without previous release event" << point;
+ point->setGrabber(nullptr);
+ } else {
+ point->setGrabber(grabbers.at(i));
+ }
}
m_pointCount = newPointCount;
return this;