aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@theqtcompany.com>2016-08-05 13:56:45 +0200
committerFrederik Gladhorn <frederik.gladhorn@qt.io>2016-08-05 16:42:35 +0000
commitc83c9a1f7ac7ff322f696d1119d4e9c06620e716 (patch)
tree87d16b06c359d03c06bf6b3afc20d067f9566661 /src
parent43db88a5c5614bcab212be1e4703e001f1fbb295 (diff)
Invalidate QQuickPointerEvents after delivery
We must not hold on to events after delivery, so better set them to nullptr. On the other hand the grabbers need to be persistent, but that's achieved since the points are copied anyway. Change-Id: I0c01ee2ec6c9238c6594f0b7e2a9533185070667 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/quick/items/qquickevents.cpp16
-rw-r--r--src/quick/items/qquickwindow.cpp2
2 files changed, 14 insertions, 4 deletions
diff --git a/src/quick/items/qquickevents.cpp b/src/quick/items/qquickevents.cpp
index 8d8c58beaa..bc9e5d0ad2 100644
--- a/src/quick/items/qquickevents.cpp
+++ b/src/quick/items/qquickevents.cpp
@@ -563,10 +563,14 @@ void QQuickEventTouchPoint::reset(const QTouchEvent::TouchPoint &tp, ulong times
QQuickPointerEvent::~QQuickPointerEvent()
{}
-QQuickPointerEvent *QQuickPointerMouseEvent::reset(QEvent *event) {
+QQuickPointerEvent *QQuickPointerMouseEvent::reset(QEvent *event)
+{
auto ev = static_cast<QMouseEvent*>(event);
- m_device = QQuickPointerDevice::genericMouseDevice();
m_event = ev;
+ if (!event)
+ return this;
+
+ m_device = QQuickPointerDevice::genericMouseDevice();
m_button = ev->button();
m_pressedButtons = ev->buttons();
Qt::TouchPointState state = Qt::TouchPointStationary;
@@ -588,10 +592,14 @@ QQuickPointerEvent *QQuickPointerMouseEvent::reset(QEvent *event) {
return this;
}
-QQuickPointerEvent *QQuickPointerTouchEvent::reset(QEvent *event) {
+QQuickPointerEvent *QQuickPointerTouchEvent::reset(QEvent *event)
+{
auto ev = static_cast<QTouchEvent*>(event);
- m_device = QQuickPointerDevice::touchDevice(ev->device());
m_event = ev;
+ if (!event)
+ return this;
+
+ m_device = QQuickPointerDevice::touchDevice(ev->device());
m_button = Qt::NoButton;
m_pressedButtons = Qt::NoButton;
diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp
index 64acfa4020..172311d997 100644
--- a/src/quick/items/qquickwindow.cpp
+++ b/src/quick/items/qquickwindow.cpp
@@ -2109,6 +2109,8 @@ void QQuickWindowPrivate::deliverPointerEvent(QQuickPointerEvent *event)
Q_ASSERT(false);
}
+ event->reset(nullptr);
+
--pointerEventRecursionGuard;
}