aboutsummaryrefslogtreecommitdiffstats
path: root/src/templates
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@theqtcompany.com>2015-12-18 14:01:04 +0100
committerJ-P Nurmi <jpnurmi@theqtcompany.com>2015-12-18 13:24:21 +0000
commit9a951729584cded035da6f13d9e95cf9b5fc5c5e (patch)
treedf8aeadfb4619fb3c7e6fff321387b44034a2603 /src/templates
parent4794fce4be864b0a2054e4726e0ba4f595332c24 (diff)
Fix Drawer to not steal touch too eagerly
Change-Id: I52ae65685cd2087b82bb07e8ed50e2fb0d073123 Task-number: QTBUG-50045 Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
Diffstat (limited to 'src/templates')
-rw-r--r--src/templates/qquickdrawer.cpp22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/templates/qquickdrawer.cpp b/src/templates/qquickdrawer.cpp
index cc79c9bf..c2c2c3bb 100644
--- a/src/templates/qquickdrawer.cpp
+++ b/src/templates/qquickdrawer.cpp
@@ -134,6 +134,16 @@ void QQuickDrawerPrivate::updateContent()
}
}
+static bool dragOverThreshold(qreal d, Qt::Axis axis, QMouseEvent *event)
+{
+ // Flickable uses a hard-coded threshold of 15 for flicking, and
+ // QStyleHints::startDragDistance for dragging. Drawer uses a bit
+ // larger threshold to avoid being too eager to steal touch (QTBUG-50045)
+ int threshold = qMax(20, QGuiApplication::styleHints()->startDragDistance() + 5);
+
+ return QQuickWindowPrivate::dragOverThreshold(d, axis, event, threshold);
+}
+
bool QQuickDrawerPrivate::handleMousePressEvent(QQuickItem *item, QMouseEvent *event)
{
Q_Q(QQuickDrawer);
@@ -143,16 +153,16 @@ bool QQuickDrawerPrivate::handleMousePressEvent(QQuickItem *item, QMouseEvent *e
// only accept pressing at drag margins when fully closed
switch (edge) {
case Qt::LeftEdge:
- event->setAccepted(!QQuickWindowPrivate::dragOverThreshold(event->x(), Qt::XAxis, event));
+ event->setAccepted(!dragOverThreshold(event->x(), Qt::XAxis, event));
break;
case Qt::RightEdge:
- event->setAccepted(!QQuickWindowPrivate::dragOverThreshold(q->width() - event->x(), Qt::XAxis, event));
+ event->setAccepted(!dragOverThreshold(q->width() - event->x(), Qt::XAxis, event));
break;
case Qt::TopEdge:
- event->setAccepted(!QQuickWindowPrivate::dragOverThreshold(event->y(), Qt::YAxis, event));
+ event->setAccepted(!dragOverThreshold(event->y(), Qt::YAxis, event));
break;
case Qt::BottomEdge:
- event->setAccepted(!QQuickWindowPrivate::dragOverThreshold(q->height() - event->y(), Qt::YAxis, event));
+ event->setAccepted(!dragOverThreshold(q->height() - event->y(), Qt::YAxis, event));
break;
}
offset = 0;
@@ -172,9 +182,9 @@ bool QQuickDrawerPrivate::handleMouseMoveEvent(QQuickItem *item, QMouseEvent *ev
if (!q->keepMouseGrab()) {
bool overThreshold = false;
if (edge == Qt::LeftEdge || edge == Qt::RightEdge)
- overThreshold = QQuickWindowPrivate::dragOverThreshold(movePoint.x() - pressPoint.x(), Qt::XAxis, event);
+ overThreshold = dragOverThreshold(movePoint.x() - pressPoint.x(), Qt::XAxis, event);
else
- overThreshold = QQuickWindowPrivate::dragOverThreshold(movePoint.y() - pressPoint.y(), Qt::YAxis, event);
+ overThreshold = dragOverThreshold(movePoint.y() - pressPoint.y(), Qt::YAxis, event);
if (window && overThreshold) {
QQuickItem *grabber = q->window()->mouseGrabberItem();