summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJarkko T. Toivonen <ext-jarkko.t.toivonen@nokia.com>2012-01-24 15:12:07 +0200
committerPasi Pentikäinen <ext-pasi.a.pentikainen@nokia.com>2012-02-07 12:33:54 +0100
commitbe407ef869ba7138a4e9104fc8bb95f48a76868c (patch)
tree962a53269fbfa88d8d99df8fc074d52194a57c93
parent07e2c3316b544c96e082acea774d089119ed7c5a (diff)
downloadqt4-tools-be407ef869ba7138a4e9104fc8bb95f48a76868c.tar.gz
Fix pinch-zoom problem when application is deactivated
Deactivation can happen for example if some notification dialog opens on top of the application. In this case the PinchFinished signal was not emitted. It is fixed so that when the QDeclarativePinchArea component receives QEvent::WindowDeactivate event, the ongoing touch activity is cancelled, which causes the pinch to finish. Also if QEvent::TouchUpdate event is received without receiving QEvent::TouchBegin event first, the QEvent::TouchUpdate event will not cause the updatePinch() method to be called. Task-number: ou1cimx1#948030 Change-Id: Ib8b9e1a022415be06f1a8e778b887418f32c75ef Reviewed-by: Murray Read <ext-murray.2.read@nokia.com> Reviewed-by: Pasi Pentikäinen <ext-pasi.a.pentikainen@nokia.com> (cherry picked from commit e4073fdea521c4b6c36461b51fc16f818c502cc3)
-rw-r--r--src/declarative/graphicsitems/qdeclarativepincharea.cpp11
-rw-r--r--src/declarative/graphicsitems/qdeclarativepincharea_p_p.h3
2 files changed, 11 insertions, 3 deletions
diff --git a/src/declarative/graphicsitems/qdeclarativepincharea.cpp b/src/declarative/graphicsitems/qdeclarativepincharea.cpp
index 0e14ff1792..8fa5168842 100644
--- a/src/declarative/graphicsitems/qdeclarativepincharea.cpp
+++ b/src/declarative/graphicsitems/qdeclarativepincharea.cpp
@@ -278,7 +278,10 @@ bool QDeclarativePinchArea::event(QEvent *event)
return QDeclarativeItem::event(event);
switch (event->type()) {
case QEvent::TouchBegin:
- case QEvent::TouchUpdate: {
+ d->touchEventsActive = true;
+ // No break, continue to next case.
+ case QEvent::TouchUpdate:
+ if (d->touchEventsActive) {
QTouchEvent *touch = static_cast<QTouchEvent*>(event);
d->touchPoints.clear();
for (int i = 0; i < touch->touchPoints().count(); ++i) {
@@ -287,9 +290,13 @@ bool QDeclarativePinchArea::event(QEvent *event)
}
}
updatePinch();
+ return true;
}
- return true;
+ break;
+ case QEvent::WindowDeactivate:
+ // No break, continue to next case.
case QEvent::TouchEnd:
+ d->touchEventsActive = false;
d->touchPoints.clear();
updatePinch();
break;
diff --git a/src/declarative/graphicsitems/qdeclarativepincharea_p_p.h b/src/declarative/graphicsitems/qdeclarativepincharea_p_p.h
index a01859cdf9..3e2eb1f247 100644
--- a/src/declarative/graphicsitems/qdeclarativepincharea_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativepincharea_p_p.h
@@ -71,7 +71,7 @@ public:
, pinchRejected(false), pinchActivated(false)
, pinch(0), pinchStartDist(0), pinchStartScale(1.0)
, pinchLastScale(1.0), pinchStartRotation(0.0), pinchStartAngle(0.0)
- , pinchLastAngle(0.0), pinchRotation(0.0)
+ , pinchLastAngle(0.0), pinchRotation(0.0), touchEventsActive(false)
{
}
@@ -90,6 +90,7 @@ public:
bool inPinch : 1;
bool pinchRejected : 1;
bool pinchActivated : 1;
+ bool touchEventsActive : 1;
QDeclarativePinch *pinch;
QPointF sceneStartPoint1;
QPointF sceneStartPoint2;