diff options
author | Alberto Mardegan <info@mardy.it> | 2012-07-05 18:10:34 +0400 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-07-16 02:30:52 +0200 |
commit | 80dd824864df17bb1293a4438325f2b20306861b (patch) | |
tree | 0dafc29e090daf32a8d769c172aa00d1326d8957 /src/quick/items | |
parent | c87df269c0590f5d0b9837d539a5c119e401b750 (diff) |
MouseArea: use current value of drag.axis
If the drag.axis is changed while a drag operation is in progress, put
it into action immediately. This allows, for example, start a dragging
operation out of an item in a scrollable ListView to anywhere on the
screen.
See the linked bug number for an example.
Task-number: QTBUG-26440
Change-Id: Id4219d44d1066dd962319086ac1f2a2a75bb2525
Reviewed-by: Damian Jansen <damian.jansen@nokia.com>
Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'src/quick/items')
-rw-r--r-- | src/quick/items/qquickmousearea.cpp | 22 | ||||
-rw-r--r-- | src/quick/items/qquickmousearea_p_p.h | 2 |
2 files changed, 9 insertions, 15 deletions
diff --git a/src/quick/items/qquickmousearea.cpp b/src/quick/items/qquickmousearea.cpp index a26c7c97f9..59da22bf8b 100644 --- a/src/quick/items/qquickmousearea.cpp +++ b/src/quick/items/qquickmousearea.cpp @@ -194,7 +194,7 @@ QQuickDragAttached *QQuickDrag::qmlAttachedProperties(QObject *obj) QQuickMouseAreaPrivate::QQuickMouseAreaPrivate() : enabled(true), hovered(false), longPress(false), - moved(false), dragX(true), dragY(true), stealMouse(false), doubleClick(false), preventStealing(false), + moved(false), stealMouse(false), doubleClick(false), preventStealing(false), propagateComposedEvents(false), pressed(0) #ifndef QT_NO_DRAGANDDROP , drag(0) @@ -722,13 +722,6 @@ void QQuickMouseArea::mousePressEvent(QMouseEvent *event) d->pressAndHoldTimer.start(PressAndHoldDelay, this); setKeepMouseGrab(d->stealMouse); event->setAccepted(setPressed(event->button(), true)); - -#ifndef QT_NO_DRAGANDDROP - if (d->drag) { - d->dragX = drag()->axis() & QQuickDrag::XAxis; - d->dragY = drag()->axis() & QQuickDrag::YAxis; - } -#endif } } @@ -780,7 +773,10 @@ void QQuickMouseArea::mouseMoveEvent(QMouseEvent *event) QPointF dragPos = d->drag->target()->pos(); - if (d->dragX && d->drag->active()) { + bool dragX = drag()->axis() & QQuickDrag::XAxis; + bool dragY = drag()->axis() & QQuickDrag::YAxis; + + if (dragX && d->drag->active()) { qreal x = (curLocalPos.x() - startLocalPos.x()) + startPos.x(); if (x < drag()->xmin()) x = drag()->xmin(); @@ -788,7 +784,7 @@ void QQuickMouseArea::mouseMoveEvent(QMouseEvent *event) x = drag()->xmax(); dragPos.setX(x); } - if (d->dragY && d->drag->active()) { + if (dragY && d->drag->active()) { qreal y = (curLocalPos.y() - startLocalPos.y()) + startPos.y(); if (y < drag()->ymin()) y = drag()->ymin(); @@ -801,9 +797,9 @@ void QQuickMouseArea::mouseMoveEvent(QMouseEvent *event) if (!keepMouseGrab()) { bool xDragged = QQuickCanvasPrivate::dragOverThreshold(dx, Qt::XAxis, event); bool yDragged = QQuickCanvasPrivate::dragOverThreshold(dy, Qt::YAxis, event); - if ((!d->dragY && !yDragged && d->dragX && xDragged) - || (!d->dragX && !xDragged && d->dragY && yDragged) - || (d->dragX && d->dragY && (xDragged || yDragged))) { + if ((!dragY && !yDragged && dragX && xDragged) + || (!dragX && !xDragged && dragY && yDragged) + || (dragX && dragY && (xDragged || yDragged))) { setKeepMouseGrab(true); d->stealMouse = true; } diff --git a/src/quick/items/qquickmousearea_p_p.h b/src/quick/items/qquickmousearea_p_p.h index aa28da88bc..743cf9ee8c 100644 --- a/src/quick/items/qquickmousearea_p_p.h +++ b/src/quick/items/qquickmousearea_p_p.h @@ -89,8 +89,6 @@ public: bool hovered : 1; bool longPress : 1; bool moved : 1; - bool dragX : 1; - bool dragY : 1; bool stealMouse : 1; bool doubleClick : 1; bool preventStealing : 1; |