on xenial help sign in
DirectionalDragArea: emit draggingChanged() on direct recognition

draggingChanged() should be emited when status change from WaitingForTouch directly to Recognized. Approved by Michał Sawicz, PS Jenkins bot.

commitdc9964e8e8b72b1b2fb24784a1153088abd45090 authorDaniel d'Andrada <daniel.dandrada@canonical.com> dateFri 28 Jun 2013, 19:18 (13 years ago) parent1d88b3144fd2a5
2 files changed+36
plugins/Ubuntu/Gestures/DirectionalDragArea.cpp+4 tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.cpp+32
plugins/Ubuntu/Gestures/DirectionalDragArea.cpp+4
@@ -391,6 +391,10 @@ void DirectionalDragArea::setStatus(DirectionalDragArea::Status newStatus)
391391 m_recognitionTimer->start();
392392 Q_EMIT draggingChanged(true);
393393 break;
394+ case Recognized:
395+ if (oldStatus == WaitingForTouch)
396+ Q_EMIT draggingChanged(true);
397+ break;
394398 case Rejected:
395399 Q_EMIT draggingChanged(false);
396400 break;
tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.cpp+32
@@ -67,6 +67,7 @@ private Q_SLOTS:
6767 void maxSilenceTime();
6868 void sceneXAndX();
6969 void sceneYAndY();
70+ void emitDraggingChangedOnDirectRecognition();
7071
7172private:
7273 QQuickView *createView();
@@ -514,6 +515,37 @@ void tst_DirectionalDragArea::sceneYAndY()
514515 QCOMPARE(edgeDragArea->touchSceneY(), touchScenePos.y());
515516}
516517
518+/*
519+ Emit draggingChanged() when status change from WaitingForTouch directly to Recognized.
520+ This happens when the gesture recognition is effectively disabled (e.g. by setting a
521+ distanceThreshold of zero)
522+ */
523+void tst_DirectionalDragArea::emitDraggingChangedOnDirectRecognition()
524+{
525+ DirectionalDragArea *edgeDragArea =
526+ view->rootObject()->findChild<DirectionalDragArea*>("hpDragArea");
527+ QVERIFY(edgeDragArea != 0);
528+ edgeDragArea->setRecognitionTimer(fakeTimer);
529+ edgeDragArea->setTimeSource(fakeTimeSource);
530+
531+ QPointF touchPos = calculateInitialTouchPos(edgeDragArea, view);
532+
533+ QSignalSpy draggingSpy(edgeDragArea, SIGNAL(draggingChanged(bool)));
534+
535+ // That will make it completetly skip the recognition phase ("Undecided" status).
536+ edgeDragArea->setDistanceThreshold(0.0);
537+
538+ QCOMPARE((int)edgeDragArea->status(), (int)DirectionalDragArea::WaitingForTouch);
539+ QCOMPARE(edgeDragArea->dragging(), false);
540+
541+ fakeTimeSource->m_msecsSinceReference = 0;
542+ QTest::touchEvent(view, device).press(0, touchPos.toPoint());
543+
544+ QCOMPARE((int)edgeDragArea->status(), (int)DirectionalDragArea::Recognized);
545+ QCOMPARE(draggingSpy.count(), 1);
546+ QCOMPARE(edgeDragArea->dragging(), true);
547+}
548+
517549QTEST_MAIN(tst_DirectionalDragArea)
518550
519551#include "tst_DirectionalDragArea.moc"