summaryrefslogtreecommitdiffstats
path: root/src/declarative/graphicsitems
diff options
context:
space:
mode:
authorAndrew den Exter <andrew.den.exter@jollamobile.com>2013-02-16 17:59:50 +1000
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-02-22 02:53:35 +0100
commit67db779665b1d95a20720c0dee058c47f7df8726 (patch)
treee8a7fc3b94304c31438cd86c9271e4a0e71c63e2 /src/declarative/graphicsitems
parentf7680b55f0d1d1ef102d40166f74cf4eee605e44 (diff)
MouseArea shouldn't grab the mouse until there is an effective drag.
A MouseArea shouldn't prevent a parent MouseArea or Flickable from handling a drag event unless it is going to do something useful with it. Task-number: QTBUG-29717 Change-Id: I17caa51ebc2e547e73e727fd185e60644591ad2b Reviewed-by: Alan Alpert <aalpert@rim.com>
Diffstat (limited to 'src/declarative/graphicsitems')
-rw-r--r--src/declarative/graphicsitems/qdeclarativemousearea.cpp39
1 files changed, 17 insertions, 22 deletions
diff --git a/src/declarative/graphicsitems/qdeclarativemousearea.cpp b/src/declarative/graphicsitems/qdeclarativemousearea.cpp
index a7c38ea8..9fa325b0 100644
--- a/src/declarative/graphicsitems/qdeclarativemousearea.cpp
+++ b/src/declarative/graphicsitems/qdeclarativemousearea.cpp
@@ -530,37 +530,32 @@ void QDeclarativeMouseArea::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
curLocalPos = event->scenePos();
}
- const int dragThreshold = QApplication::startDragDistance();
- qreal dx = qAbs(curLocalPos.x() - startLocalPos.x());
- qreal dy = qAbs(curLocalPos.y() - startLocalPos.y());
-
if (keepMouseGrab() && d->stealMouse)
d->drag->setActive(true);
bool dragX = drag()->axis() & QDeclarativeDrag::XAxis;
bool dragY = drag()->axis() & QDeclarativeDrag::YAxis;
- if (dragX && d->drag->active()) {
- qreal x = (curLocalPos.x() - startLocalPos.x()) + d->startX;
- if (x < drag()->xmin())
- x = drag()->xmin();
- else if (x > drag()->xmax())
- x = drag()->xmax();
- drag()->target()->setX(x);
- }
- if (dragY && d->drag->active()) {
- qreal y = (curLocalPos.y() - startLocalPos.y()) + d->startY;
- if (y < drag()->ymin())
- y = drag()->ymin();
- else if (y > drag()->ymax())
- y = drag()->ymax();
- drag()->target()->setY(y);
+ const qreal x = dragX
+ ? qBound(d->drag->xmin(), d->startX + curLocalPos.x() - startLocalPos.x(), d->drag->xmax())
+ : d->startX;
+ const qreal y = dragY
+ ? qBound(d->drag->ymin(), d->startY + curLocalPos.y() - startLocalPos.y(), d->drag->ymax())
+ : d->startY;
+
+ if (d->drag->active()) {
+ if (dragX && dragY)
+ d->drag->target()->setPos(x, y);
+ else if (dragX)
+ d->drag->target()->setX(x);
+ else if (dragY)
+ d->drag->target()->setY(y);
}
if (!keepMouseGrab()) {
- if ((!dragY && dy < dragThreshold && dragX && dx > dragThreshold)
- || (!dragX && dx < dragThreshold && dragY && dy > dragThreshold)
- || (dragX && dragY && (dx > dragThreshold || dy > dragThreshold))) {
+ const int dragThreshold = QApplication::startDragDistance();
+
+ if (qAbs(x - d->startX) > dragThreshold || qAbs(y - d->startY) > dragThreshold) {
setKeepMouseGrab(true);
d->stealMouse = true;
}