From 88057e3407aa16d0a9dc9dcc6d0ea6174dce693b Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 21 Oct 2014 17:31:55 +0200 Subject: QSwipeGestureRecognizer: Fix gesture cancel on direction change. Task-number: QTBUG-12736 Change-Id: I6d8d09843b45df17cb9158070f63b3397c5b4c07 Reviewed-by: Lars Knoll Reviewed-by: Frederik Gladhorn --- src/widgets/kernel/qstandardgestures.cpp | 4 ++-- .../widgets/gestures/qgesturerecognizer/tst_qgesturerecognizer.cpp | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/widgets/kernel/qstandardgestures.cpp b/src/widgets/kernel/qstandardgestures.cpp index 78a2c65060..0822c04033 100644 --- a/src/widgets/kernel/qstandardgestures.cpp +++ b/src/widgets/kernel/qstandardgestures.cpp @@ -341,10 +341,10 @@ QGestureRecognizer::Result QSwipeGestureRecognizer::recognize(QGesture *state, if (d->horizontalDirection == QSwipeGesture::NoDirection) d->horizontalDirection = horizontal; if (d->verticalDirection != vertical || d->horizontalDirection != horizontal) { - // the user has changed the direction! result = QGestureRecognizer::CancelGesture; + } else { + result = QGestureRecognizer::TriggerGesture; } - result = QGestureRecognizer::TriggerGesture; } else { if (q->state() != Qt::NoGesture) result = QGestureRecognizer::TriggerGesture; diff --git a/tests/auto/widgets/gestures/qgesturerecognizer/tst_qgesturerecognizer.cpp b/tests/auto/widgets/gestures/qgesturerecognizer/tst_qgesturerecognizer.cpp index 867c6eb629..833494f25e 100644 --- a/tests/auto/widgets/gestures/qgesturerecognizer/tst_qgesturerecognizer.cpp +++ b/tests/auto/widgets/gestures/qgesturerecognizer/tst_qgesturerecognizer.cpp @@ -268,6 +268,7 @@ void tst_QGestureRecognizer::pinchGesture() enum SwipeSubTest { SwipeLineSubTest, + SwipeChangeDirectionSubTest, }; void tst_QGestureRecognizer::swipeGesture_data() @@ -275,6 +276,7 @@ void tst_QGestureRecognizer::swipeGesture_data() QTest::addColumn("swipeSubTest"); QTest::addColumn("gestureExpected"); QTest::newRow("Line") << int(SwipeLineSubTest) << true; + QTest::newRow("ChangeDirection") << int(SwipeChangeDirectionSubTest) << false; } void tst_QGestureRecognizer::swipeGesture() @@ -311,6 +313,10 @@ void tst_QGestureRecognizer::swipeGesture() case SwipeLineSubTest: linearSequence(5, moveDelta, swipeSequence, points, &widget); break; + case SwipeChangeDirectionSubTest: + linearSequence(5, moveDelta, swipeSequence, points, &widget); + linearSequence(3, QPoint(-moveDelta.x(), moveDelta.y()), swipeSequence, points, &widget); + break; } releaseSequence(swipeSequence, points, &widget); -- cgit v1.2.3