QQuickMouseAreaPrivate::QQuickMouseAreaPrivate()
: enabled(true), hovered(false), pressed(false), longPress(false),
- moved(false), stealMouse(false), doubleClick(false), preventStealing(false),
+ moved(false), dragX(true), dragY(true), stealMouse(false), doubleClick(false), preventStealing(false),
propagateComposedEvents(false), drag(0)
{
}
else {
d->longPress = false;
d->saveEvent(event);
- if (d->drag) {
- d->dragX = drag()->axis() & QQuickDrag::XAxis;
- d->dragY = drag()->axis() & QQuickDrag::YAxis;
- }
if (d->drag)
d->drag->setActive(false);
setHovered(true);
setKeepMouseGrab(d->stealMouse);
event->setAccepted(setPressed(true));
+ if (d->drag) {
+ d->dragX = drag()->axis() & QQuickDrag::XAxis;
+ d->dragY = drag()->axis() & QQuickDrag::YAxis;
+ }
}
}
void dragProperties();
void resetDrag();
void dragging();
+ void setDragOnPressed();
void updateMouseAreaPosOnClick();
void updateMouseAreaPosOnResize();
void noOnClickedWithPressAndHold();
delete canvas;
}
+void tst_QQuickMouseArea::setDragOnPressed()
+{
+ QQuickView *canvas = createView();
+
+ canvas->setSource(testFileUrl("setDragOnPressed.qml"));
+ canvas->show();
+ canvas->requestActivateWindow();
+ QTest::qWait(20);
+ QVERIFY(canvas->rootObject() != 0);
+
+ QQuickMouseArea *mouseArea = qobject_cast<QQuickMouseArea *>(canvas->rootObject());
+ QVERIFY(mouseArea);
+
+ // target
+ QQuickItem *target = mouseArea->findChild<QQuickItem*>("target");
+ QVERIFY(target);
+
+ QTest::mousePress(canvas, Qt::LeftButton, 0, QPoint(100,100));
+
+ QQuickDrag *drag = mouseArea->drag();
+ QVERIFY(drag);
+ QVERIFY(!drag->active());
+
+ QCOMPARE(target->x(), 50.0);
+ QCOMPARE(target->y(), 50.0);
+
+ // First move event triggers drag, second is acted upon.
+ // This is due to possibility of higher stacked area taking precedence.
+
+ QTest::mouseMove(canvas, QPoint(111,102));
+ QTest::qWait(50);
+ QTest::mouseMove(canvas, QPoint(122,122));
+ QTest::qWait(50);
+
+ QVERIFY(drag->active());
+ QCOMPARE(target->x(), 72.0);
+ QCOMPARE(target->y(), 50.0);
+
+ QTest::mouseRelease(canvas, Qt::LeftButton, 0, QPoint(122,122));
+ QTest::qWait(50);
+
+ QVERIFY(!drag->active());
+ QCOMPARE(target->x(), 72.0);
+ QCOMPARE(target->y(), 50.0);
+
+ delete canvas;
+}
+
QQuickView *tst_QQuickMouseArea::createView()
{
QQuickView *canvas = new QQuickView(0);