diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-04-21 08:11:22 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-04-24 10:49:34 +0200 |
commit | 7b9b44d8f45c57df1393960807497bd7286d3471 (patch) | |
tree | cd81aae90c9c6f2540003eed3de2f3247e803924 | |
parent | ec707b03c62efa8e50aa17f84d2f8d175269c96d (diff) |
Fix crashes when dragging
In QQuickWindowPrivate::sendFilteredPointerEventImpl(),
it appears that the mouse event of the QQuickPointerMouseEvent
can be reset in childMouseEventFilter(), causing a crash
in QQuickPointerMouseEvent::isPressEvent().
Add checks QQuickPointerMouseEvent to fix this.
Fixes: QTBUG-83411
Change-Id: I45f7406de4363974fc6adcac2999cdf55a0c84a7
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
-rw-r--r-- | src/quick/items/qquickevents.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/quick/items/qquickevents.cpp b/src/quick/items/qquickevents.cpp index eddd15c6da..950afaed52 100644 --- a/src/quick/items/qquickevents.cpp +++ b/src/quick/items/qquickevents.cpp @@ -1744,6 +1744,8 @@ bool QQuickSinglePointEvent::hasExclusiveGrabber(const QQuickPointerHandler *han bool QQuickPointerMouseEvent::isPressEvent() const { + if (!m_event) + return false; auto me = static_cast<QMouseEvent*>(m_event); return ((me->type() == QEvent::MouseButtonPress || me->type() == QEvent::MouseButtonDblClick) && (me->buttons() & me->button()) == me->buttons()); @@ -1751,18 +1753,24 @@ bool QQuickPointerMouseEvent::isPressEvent() const bool QQuickPointerMouseEvent::isDoubleClickEvent() const { + if (!m_event) + return false; auto me = static_cast<QMouseEvent*>(m_event); return (me->type() == QEvent::MouseButtonDblClick); } bool QQuickPointerMouseEvent::isUpdateEvent() const { + if (!m_event) + return false; auto me = static_cast<QMouseEvent*>(m_event); return me->type() == QEvent::MouseMove; } bool QQuickPointerMouseEvent::isReleaseEvent() const { + if (!m_event) + return false; auto me = static_cast<QMouseEvent*>(m_event); return me && me->type() == QEvent::MouseButtonRelease; } |