aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items
diff options
context:
space:
mode:
authorAlberto Mardegan <info@mardy.it>2012-07-05 18:10:34 +0400
committerQt by Nokia <qt-info@nokia.com>2012-07-16 02:30:52 +0200
commit80dd824864df17bb1293a4438325f2b20306861b (patch)
tree0dafc29e090daf32a8d769c172aa00d1326d8957 /src/quick/items
parentc87df269c0590f5d0b9837d539a5c119e401b750 (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.cpp22
-rw-r--r--src/quick/items/qquickmousearea_p_p.h2
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;