diff options
author | J-P Nurmi <jpnurmi@theqtcompany.com> | 2015-12-18 14:01:04 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@theqtcompany.com> | 2015-12-18 13:24:21 +0000 |
commit | 9a951729584cded035da6f13d9e95cf9b5fc5c5e (patch) | |
tree | df8aeadfb4619fb3c7e6fff321387b44034a2603 /src/templates | |
parent | 4794fce4be864b0a2054e4726e0ba4f595332c24 (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.cpp | 22 |
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(); |