aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/handlers/qquicktaphandler.cpp
diff options
context:
space:
mode:
authorShawn Rutledge <shawn.rutledge@qt.io>2017-04-20 09:59:00 +0200
committerShawn Rutledge <shawn.rutledge@qt.io>2017-04-21 13:30:58 +0000
commitdcc7367997e7241918cdf0c702c7bb8325eb1ad4 (patch)
tree56c2fb0a446ec0a8fb900f3bcc40b225df59196e /src/quick/handlers/qquicktaphandler.cpp
parentfdb7c432514c828a7a921270d55e1c134151e19a (diff)
TapHandler: do not react to stationary touchpoints
In autotests, stationary points normally have invalid position. A TapHandler does not need to react to them anyway. But we must also avoid having a grab cancelation due to a stationary point, and that applies to all PointerHandlers in general. Change-Id: I99493ad7d859e0c4ef155afc699aa34f28ffdbc7 Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
Diffstat (limited to 'src/quick/handlers/qquicktaphandler.cpp')
-rw-r--r--src/quick/handlers/qquicktaphandler.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/quick/handlers/qquicktaphandler.cpp b/src/quick/handlers/qquicktaphandler.cpp
index aeda9a0357..14aeb07864 100644
--- a/src/quick/handlers/qquicktaphandler.cpp
+++ b/src/quick/handlers/qquicktaphandler.cpp
@@ -120,7 +120,7 @@ bool QQuickTapHandler::wantsEventPoint(QQuickEventPoint *point)
case QQuickEventPoint::Released:
ret = parentContains(point);
break;
- default: // update or stationary
+ case QQuickEventPoint::Updated:
switch (m_gesturePolicy) {
case DragThreshold:
ret = !dragOverThreshold(point);
@@ -133,12 +133,18 @@ bool QQuickTapHandler::wantsEventPoint(QQuickEventPoint *point)
break;
}
break;
+ case QQuickEventPoint::Stationary:
+ // Never react in any way when the point hasn't moved.
+ // In autotests, the point's position may not even be correct, because
+ // QTest::touchEvent(window, touchDevice).stationary(1)
+ // provides no opportunity to give a position, so it ends up being random.
+ break;
}
// If this is the grabber, returning false from this function will cancel the grab,
// so onGrabChanged(this, CancelGrabExclusive, point) and setPressed(false) will be called.
// But when m_gesturePolicy is DragThreshold, we don't get an exclusive grab, but
// we still don't want to be pressed anymore.
- if (!ret && point->pointId() == pointId())
+ if (!ret && point->pointId() == pointId() && point->state() != QQuickEventPoint::Stationary)
setPressed(false, true, point);
return ret;
}