diff options
author | Frederik Gladhorn <frederik.gladhorn@theqtcompany.com> | 2016-08-05 13:56:45 +0200 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@qt.io> | 2016-08-05 16:42:35 +0000 |
commit | c83c9a1f7ac7ff322f696d1119d4e9c06620e716 (patch) | |
tree | 87d16b06c359d03c06bf6b3afc20d067f9566661 /src | |
parent | 43db88a5c5614bcab212be1e4703e001f1fbb295 (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.cpp | 16 | ||||
-rw-r--r-- | src/quick/items/qquickwindow.cpp | 2 |
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; } |