else
timeline.accel(data.move, v, deceleration, maxDistance);
timeline.callback(QDeclarativeTimeLineCallback(&data.move, fixupCallback, this));
- if (!hData.flicking && q->xflick()) {
+ if (!hData.flicking && q->xflick() && (&data == &hData)) {
hData.flicking = true;
emit q->flickingChanged();
emit q->flickingHorizontallyChanged();
if (!vData.flicking)
emit q->flickStarted();
}
- if (!vData.flicking && q->yflick()) {
+ if (!vData.flicking && q->yflick() && (&data == &vData)) {
vData.flicking = true;
emit q->flickingChanged();
emit q->flickingVerticallyChanged();
pressPos = event->localPos();
hData.pressPos = hData.move.value();
vData.pressPos = vData.move.value();
- hData.flicking = false;
- vData.flicking = false;
+ bool wasFlicking = hData.flicking || vData.flicking;
+ if (hData.flicking) {
+ hData.flicking = false;
+ emit q->flickingHorizontallyChanged();
+ }
+ if (vData.flicking) {
+ vData.flicking = false;
+ emit q->flickingVerticallyChanged();
+ }
+ if (wasFlicking)
+ emit q->flickingChanged();
lastPosTime = lastPressTime = computeCurrentTime(event);
QQuickItemPrivate::start(velocityTime);
}
rejectY = false;
}
}
- if (!rejectY && stealMouse) {
+ if (!rejectY && stealMouse && dy != 0.0) {
vData.move.setValue(qRound(newY));
vMoved = true;
}
rejectX = false;
}
}
- if (!rejectX && stealMouse) {
+ if (!rejectX && stealMouse && dx != 0.0) {
hData.move.setValue(qRound(newX));
hMoved = true;
}
QTest::mouseMove(canvas, QPoint(70, 50));
QTest::mouseMove(canvas, QPoint(60, 50));
+ QVERIFY(!flickable->isDraggingVertically());
QVERIFY(flickable->isDraggingHorizontally());
QVERIFY(flickable->isDragging());
QCOMPARE(vDragSpy.count(), 0);
QCOMPARE(hDragSpy.count(), 2);
QCOMPARE(dragStartSpy.count(), 1);
QCOMPARE(dragEndSpy.count(), 1);
-
// Don't test moving because a flick could occur
+#ifdef Q_OS_MAC
+ QSKIP("Producing flicks on Mac CI impossible due to timing problems");
+#endif
+
+ QTRY_VERIFY(!flickable->isMoving());
+
+ vMoveSpy.clear();
+ hMoveSpy.clear();
+ moveSpy.clear();
+ QSignalSpy vFlickSpy(flickable, SIGNAL(flickingVerticallyChanged()));
+ QSignalSpy hFlickSpy(flickable, SIGNAL(flickingHorizontallyChanged()));
+ QSignalSpy flickSpy(flickable, SIGNAL(flickingChanged()));
+
+ // flick then press while it is still moving
+ // flicking == false, moving == true;
+ flick(canvas, QPoint(20,190), QPoint(20, 50), 200);
+ QVERIFY(flickable->verticalVelocity() > 0.0);
+ QVERIFY(flickable->isFlicking());
+ QVERIFY(flickable->isFlickingVertically());
+ QVERIFY(!flickable->isFlickingHorizontally());
+ QVERIFY(flickable->isMoving());
+ QVERIFY(flickable->isMovingVertically());
+ QVERIFY(!flickable->isMovingHorizontally());
+ QCOMPARE(vMoveSpy.count(), 1);
+ QCOMPARE(hMoveSpy.count(), 0);
+ QCOMPARE(moveSpy.count(), 1);
+ QCOMPARE(vFlickSpy.count(), 1);
+ QCOMPARE(hFlickSpy.count(), 0);
+ QCOMPARE(flickSpy.count(), 1);
+
+ QTest::mousePress(canvas, Qt::LeftButton, 0, QPoint(20, 50));
+ QTRY_VERIFY(!flickable->isFlicking());
+ QVERIFY(!flickable->isFlickingVertically());
+ QVERIFY(flickable->isMoving());
+ QVERIFY(flickable->isMovingVertically());
+
+ QTest::mouseRelease(canvas, Qt::LeftButton, 0, QPoint(20,50));
+ QVERIFY(!flickable->isFlicking());
+ QVERIFY(!flickable->isFlickingVertically());
+ QTRY_VERIFY(!flickable->isMoving());
+ QVERIFY(!flickable->isMovingVertically());
+
delete canvas;
}