aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickcanvas.cpp
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.p.agocs@nokia.com>2012-04-19 11:31:14 +0300
committerQt by Nokia <qt-info@nokia.com>2012-04-20 09:46:02 +0200
commit051eb16536305f1a1b4c8b0eb17bab7599a11b00 (patch)
treed30e404572f975d006e2447de8bc15dd971765c2 /src/quick/items/qquickcanvas.cpp
parent644f469cfffb2eb433128ef273fd6d15dbd15de1 (diff)
Avoid losing mouse events when the event loop gets spinned
The touchMouseId value has to be updated to its potential new value before delivering the events. Change-Id: I47ac5b3aad63293e19985b7b242b56db258fe786 Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'src/quick/items/qquickcanvas.cpp')
-rw-r--r--src/quick/items/qquickcanvas.cpp22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/quick/items/qquickcanvas.cpp b/src/quick/items/qquickcanvas.cpp
index 91102331a6..f59a89a0d3 100644
--- a/src/quick/items/qquickcanvas.cpp
+++ b/src/quick/items/qquickcanvas.cpp
@@ -395,15 +395,19 @@ void QQuickCanvasPrivate::translateTouchToMouse(QTouchEvent *event)
bool doubleClick = event->timestamp() - touchMousePressTimestamp
< static_cast<ulong>(qApp->styleHints()->mouseDoubleClickInterval());
touchMousePressTimestamp = event->timestamp();
+ // Store the id already here and restore it to -1 if the event does not get
+ // accepted. Cannot defer setting the new value because otherwise if the event
+ // handler spins the event loop all subsequent moves and releases get lost.
+ touchMouseId = p.id();
QQuickMouseEventEx me = touchToMouseEvent(QEvent::MouseButtonPress, p);
me.setTimestamp(event->timestamp());
me.setAccepted(false);
me.setCapabilities(event->device()->capabilities());
deliverMouseEvent(&me);
- if (me.isAccepted()) {
- touchMouseId = p.id();
+ if (me.isAccepted())
event->setAccepted(true);
- }
+ else
+ touchMouseId = -1;
if (doubleClick) {
touchMousePressTimestamp = 0;
QQuickMouseEventEx me = touchToMouseEvent(QEvent::MouseButtonDblClick, p);
@@ -411,16 +415,16 @@ void QQuickCanvasPrivate::translateTouchToMouse(QTouchEvent *event)
me.setAccepted(false);
me.setCapabilities(event->device()->capabilities());
if (!mouseGrabberItem) {
- if (deliverInitialMousePressEvent(rootItem, &me)) {
- touchMouseId = p.id();
+ if (deliverInitialMousePressEvent(rootItem, &me))
event->setAccepted(true);
- }
+ else
+ touchMouseId = -1;
} else {
deliverMouseEvent(&me);
- if (me.isAccepted()) {
- touchMouseId = p.id();
+ if (me.isAccepted())
event->setAccepted(true);
- }
+ else
+ touchMouseId = -1;
}
}
if (touchMouseId != -1)