aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.p.agocs@nokia.com>2012-02-10 13:43:00 +0200
committerQt by Nokia <qt-info@nokia.com>2012-02-13 09:19:40 +0100
commitc0100e28cadf8260769eddcc7a0306d832fed92b (patch)
treeaca535d8884080fbfd7c1e200a81d9e57063ba50 /src/quick
parenta979bf5a4cb7aeb5b690957d77b84c9dc385d6d9 (diff)
Add basic TouchCancel handling to canvas.
This makes sure that touchEvent() is properly called for all items in the scene that have an active touch. It does not handle the cancel event in any other special way. Change-Id: Id66527ced8cb63d0b29f25f37c139e6d6aec9ba0 Reviewed-by: Michael Brasser <michael.brasser@nokia.com> Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'src/quick')
-rw-r--r--src/quick/items/qquickcanvas.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/quick/items/qquickcanvas.cpp b/src/quick/items/qquickcanvas.cpp
index 52344d6456..cb60a238db 100644
--- a/src/quick/items/qquickcanvas.cpp
+++ b/src/quick/items/qquickcanvas.cpp
@@ -824,6 +824,7 @@ bool QQuickCanvas::event(QEvent *e)
case QEvent::TouchBegin:
case QEvent::TouchUpdate:
case QEvent::TouchEnd:
+ case QEvent::TouchCancel:
{
QTouchEvent *touch = static_cast<QTouchEvent *>(e);
d->translateTouchEvent(touch);
@@ -1165,8 +1166,12 @@ bool QQuickCanvasPrivate::deliverTouchEvent(QTouchEvent *event)
qWarning("touchUpdateEvent");
else if (event->type() == QEvent::TouchEnd)
qWarning("touchEndEvent");
+ else if (event->type() == QEvent::TouchCancel)
+ qWarning("touchCancelEvent");
#endif
+ Q_Q(QQuickCanvas);
+
QHash<QQuickItem *, QList<QTouchEvent::TouchPoint> > updatedPoints;
if (event->type() == QTouchEvent::TouchBegin) { // all points are new touch points
@@ -1179,6 +1184,21 @@ bool QQuickCanvasPrivate::deliverTouchEvent(QTouchEvent *event)
return event->isAccepted();
}
+ if (event->type() == QTouchEvent::TouchCancel) {
+ // A TouchCancel event will typically not contain any points.
+ // Deliver it to all items that have active touches.
+ QSet<QQuickItem *> cancelDelivered;
+ foreach (QQuickItem *item, itemForTouchPointId) {
+ if (cancelDelivered.contains(item))
+ continue;
+ cancelDelivered.insert(item);
+ q->sendEvent(item, event);
+ }
+ // The next touch event can only be a TouchBegin so clean up.
+ itemForTouchPointId.clear();
+ return true;
+ }
+
const QList<QTouchEvent::TouchPoint> &touchPoints = event->touchPoints();
QList<QTouchEvent::TouchPoint> newPoints;
QQuickItem *item = 0;
@@ -1497,6 +1517,7 @@ bool QQuickCanvas::sendEvent(QQuickItem *item, QEvent *e)
case QEvent::TouchBegin:
case QEvent::TouchUpdate:
case QEvent::TouchEnd:
+ case QEvent::TouchCancel:
// XXX todo - should sendEvent be doing this? how does it relate to forwarded events?
if (!d->sendFilteredMouseEvent(item->parentItem(), item, e)) {
e->accept();