From 88b072b3644cfd960367096ae0103e8ddef0d06d Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Tue, 1 Feb 2011 13:09:44 +1000 Subject: PinchArea sometimes failed. Almost always failed on Mac and could fail on other systems due to QDeclarativePinchEvent::m_accepted not being initialized. Task-number: QTBUG-15491 Reviewed-by: Bea Lam --- .../graphicsitems/qdeclarativepincharea.cpp | 5 ++++- .../graphicsitems/qdeclarativepincharea_p.h | 2 +- .../graphicsitems/qdeclarativepincharea_p_p.h | 2 +- .../tst_qdeclarativepincharea.cpp | 24 ---------------------- 4 files changed, 6 insertions(+), 27 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativepincharea.cpp b/src/declarative/graphicsitems/qdeclarativepincharea.cpp index 436099e..eae83f6 100644 --- a/src/declarative/graphicsitems/qdeclarativepincharea.cpp +++ b/src/declarative/graphicsitems/qdeclarativepincharea.cpp @@ -312,6 +312,7 @@ void QDeclarativePinchArea::updatePinch() pe.setPoint1(d->lastPoint1); pe.setPoint2(d->lastPoint2); emit pinchFinished(&pe); + d->pinchStartDist = 0; if (d->pinch && d->pinch->target()) d->pinch->setActive(false); } @@ -363,7 +364,9 @@ void QDeclarativePinchArea::updatePinch() if (pe.accepted()) { d->inPinch = true; d->stealMouse = true; - grabMouse(); + QGraphicsScene *s = scene(); + if (s && s->mouseGrabberItem() != this) + grabMouse(); setKeepMouseGrab(true); if (d->pinch && d->pinch->target()) { d->pinchStartPos = pinch()->target()->pos(); diff --git a/src/declarative/graphicsitems/qdeclarativepincharea_p.h b/src/declarative/graphicsitems/qdeclarativepincharea_p.h index cd5423d..6d04708 100644 --- a/src/declarative/graphicsitems/qdeclarativepincharea_p.h +++ b/src/declarative/graphicsitems/qdeclarativepincharea_p.h @@ -207,7 +207,7 @@ class Q_AUTOTEST_EXPORT QDeclarativePinchEvent : public QObject public: QDeclarativePinchEvent(QPointF c, qreal s, qreal a, qreal r) - : QObject(), m_center(c), m_scale(s), m_angle(a), m_rotation(r) {} + : QObject(), m_center(c), m_scale(s), m_angle(a), m_rotation(r), m_accepted(true) {} QPointF center() const { return m_center; } QPointF startCenter() const { return m_startCenter; } diff --git a/src/declarative/graphicsitems/qdeclarativepincharea_p_p.h b/src/declarative/graphicsitems/qdeclarativepincharea_p_p.h index b1cdf68..5641e35 100644 --- a/src/declarative/graphicsitems/qdeclarativepincharea_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativepincharea_p_p.h @@ -68,7 +68,7 @@ class QDeclarativePinchAreaPrivate : public QDeclarativeItemPrivate public: QDeclarativePinchAreaPrivate() : absorb(true), stealMouse(false), inPinch(false) - , pinchRejected(false), pinch(0) + , pinchRejected(false), pinch(0), pinchStartDist(0) { } diff --git a/tests/auto/declarative/qdeclarativepincharea/tst_qdeclarativepincharea.cpp b/tests/auto/declarative/qdeclarativepincharea/tst_qdeclarativepincharea.cpp index b7e7a99..f175033 100644 --- a/tests/auto/declarative/qdeclarativepincharea/tst_qdeclarativepincharea.cpp +++ b/tests/auto/declarative/qdeclarativepincharea/tst_qdeclarativepincharea.cpp @@ -228,14 +228,8 @@ void tst_QDeclarativePinchArea::scale() p2 += QPoint(10,10); QTest::touchEvent(vp).move(0, p1).move(1, p2); -#ifdef Q_OS_MAC - QEXPECT_FAIL("", "todo on mac", Continue); -#endif QCOMPARE(root->property("scale").toReal(), 1.5); QCOMPARE(root->property("center").toPointF(), QPointF(40, 40)); // blackrect is at 50,50 -#ifdef Q_OS_MAC - QEXPECT_FAIL("", "todo on mac", Continue); -#endif QCOMPARE(blackRect->scale(), 1.5); // scale beyond bound @@ -243,9 +237,6 @@ void tst_QDeclarativePinchArea::scale() p2 += QPoint(50,50); QTest::touchEvent(vp).move(0, p1).move(1, p2); -#ifdef Q_OS_MAC - QEXPECT_FAIL("", "todo on mac", Continue); -#endif QCOMPARE(blackRect->scale(), 2.0); QTest::touchEvent(vp).release(0, p1).release(1, p2); @@ -292,18 +283,9 @@ void tst_QDeclarativePinchArea::pan() p2 += QPoint(10,10); QTest::touchEvent(vp).move(0, p1).move(1, p2); -#ifdef Q_OS_MAC - QEXPECT_FAIL("", "todo mac", Continue); -#endif QCOMPARE(root->property("center").toPointF(), QPointF(60, 60)); // blackrect is at 50,50 -#ifdef Q_OS_MAC - QEXPECT_FAIL("", "todo mac", Continue); -#endif QCOMPARE(blackRect->x(), 60.0); -#ifdef Q_OS_MAC - QEXPECT_FAIL("", "todo mac", Continue); -#endif QCOMPARE(blackRect->y(), 60.0); // pan x beyond bound @@ -311,13 +293,7 @@ void tst_QDeclarativePinchArea::pan() p2 += QPoint(100,100); QTest::touchEvent(vp).move(0, p1).move(1, p2); -#ifdef Q_OS_MAC - QEXPECT_FAIL("", "todo mac", Continue); -#endif QCOMPARE(blackRect->x(), 140.0); -#ifdef Q_OS_MAC - QEXPECT_FAIL("", "todo mac", Continue); -#endif QCOMPARE(blackRect->y(), 160.0); QTest::touchEvent(vp).release(0, p1).release(1, p2); -- cgit v0.12