aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@theqtcompany.com>2016-07-29 16:05:38 +0200
committerFrederik Gladhorn <frederik.gladhorn@qt.io>2016-07-31 21:46:45 +0000
commitb13668d5304c0c0cef116fb3126d772083a71563 (patch)
tree493c7daf18e69b8657248dc0ea5642da5871d0f9
parent397588a9f68886608d2d257f70178ffc1b79e6ae (diff)
Make QQuickEventPoint::grabber a QPointer internally
Accessing the grabbers was always dangerous. The present code only works because it iterates over all current QQuickItems and doesn't even try to deal with things being deleted inbetween. Change-Id: Id85791dcbd87ec8c5027f9c1376cb39e5779cabe Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
-rw-r--r--src/quick/items/qquickevents.cpp9
-rw-r--r--src/quick/items/qquickevents_p_p.h9
2 files changed, 14 insertions, 4 deletions
diff --git a/src/quick/items/qquickevents.cpp b/src/quick/items/qquickevents.cpp
index 46b6bbe87e..966a78f56b 100644
--- a/src/quick/items/qquickevents.cpp
+++ b/src/quick/items/qquickevents.cpp
@@ -501,6 +501,15 @@ QQuickPointerDevice *QQuickPointerDevice::tabletDevice(qint64 id)
return nullptr;
}
+QQuickItem *QQuickEventPoint::grabber() const
+{
+ return m_grabber.data();
+}
+
+void QQuickEventPoint::setGrabber(QQuickItem *grabber)
+{
+ m_grabber = QPointer<QQuickItem>(grabber);
+}
QQuickEventTouchPoint::QQuickEventTouchPoint(QQuickPointerTouchEvent *parent)
: QQuickEventPoint(parent), m_rotation(0), m_pressure(0)
diff --git a/src/quick/items/qquickevents_p_p.h b/src/quick/items/qquickevents_p_p.h
index b944a3d06d..571c257a26 100644
--- a/src/quick/items/qquickevents_p_p.h
+++ b/src/quick/items/qquickevents_p_p.h
@@ -55,13 +55,14 @@
#include <qqml.h>
#include <QtCore/qobject.h>
+#include <QtCore/qpointer.h>
#include <QtGui/qvector2d.h>
#include <QtGui/qevent.h>
#include <QtGui/qkeysequence.h>
+#include <QtQuick/qquickitem.h>
QT_BEGIN_NAMESPACE
-class QQuickItem;
class QQuickPointerDevice;
class QQuickPointerEvent;
class QQuickPointerMouseEvent;
@@ -281,13 +282,13 @@ public:
qreal timeHeld() const { return (m_timestamp - m_pressTimestamp) / 1000.0; }
bool isAccepted() const { return m_accept; }
void setAccepted(bool accepted = true) { m_accept = accepted; }
- QQuickItem *grabber() const { return m_grabber; }
- void setGrabber(QQuickItem *grabber) { m_grabber = grabber; }
+ QQuickItem *grabber() const;
+ void setGrabber(QQuickItem *grabber);
private:
QPointF m_scenePos;
quint64 m_pointId;
- QQuickItem *m_grabber;
+ QPointer<QQuickItem> m_grabber;
ulong m_timestamp;
ulong m_pressTimestamp;
Qt::TouchPointState m_state;