aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmldata_p.h
diff options
context:
space:
mode:
authorFabian Kosmale <fabian.kosmale@qt.io>2021-12-01 08:56:25 +0100
committerFabian Kosmale <fabian.kosmale@qt.io>2021-12-02 12:52:30 +0100
commitfeeec1920b924beb75a8cb319a46ba749d052f86 (patch)
treeb19f62d93e7952a47d45ab1ebef077a7afb4ebdf /src/qml/qml/qqmldata_p.h
parent7ff266ff782b35817d3ecc1a08c3a54bd2c2aa88 (diff)
Make QQmlData::wasDeleted/get usable with QObjectPrivate
Change-Id: I1333427acd590c81f357b9d5ad734d554ca30bf2 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src/qml/qml/qqmldata_p.h')
-rw-r--r--src/qml/qml/qqmldata_p.h27
1 files changed, 19 insertions, 8 deletions
diff --git a/src/qml/qml/qqmldata_p.h b/src/qml/qml/qqmldata_p.h
index ac82b84b16..db1ccc8648 100644
--- a/src/qml/qml/qqmldata_p.h
+++ b/src/qml/qml/qqmldata_p.h
@@ -228,8 +228,7 @@ public:
QQmlGuardImpl *guards;
- static QQmlData *get(const QObject *object, bool create = false) {
- QObjectPrivate *priv = QObjectPrivate::get(const_cast<QObject *>(object));
+ static QQmlData *get(const QObjectPrivate *priv, bool create = false) {
// If QObjectData::isDeletingChildren is set then access to QObjectPrivate::declarativeData has
// to be avoided because QObjectPrivate::currentChildBeingDeleted is in use.
if (priv->isDeletingChildren || priv->wasDeleted) {
@@ -238,12 +237,18 @@ public:
} else if (priv->declarativeData) {
return static_cast<QQmlData *>(priv->declarativeData);
} else if (create) {
- return createQQmlData(priv);
+ QObjectPrivate *mutablePriv = const_cast<QObjectPrivate *>(priv);
+ return createQQmlData(mutablePriv);
} else {
return nullptr;
}
}
+ static QQmlData *get(const QObject *object, bool create = false) {
+ const QObjectPrivate *priv = QObjectPrivate::get(object);
+ return QQmlData::get(priv, create);
+ }
+
static bool keepAliveDuringGarbageCollection(const QObject *object) {
QQmlData *ddata = get(object);
if (!ddata || ddata->indestructible || ddata->rootObjectInCreation)
@@ -255,6 +260,7 @@ public:
QHash<QQmlAttachedPropertiesFunc, QObject *> *attachedProperties() const;
static inline bool wasDeleted(const QObject *);
+ static inline bool wasDeleted(const QObjectPrivate *);
static void markAsDeleted(QObject *);
static void setQueuedForDeletion(QObject *);
@@ -316,17 +322,22 @@ private:
Q_DISABLE_COPY(QQmlData);
};
+bool QQmlData::wasDeleted(const QObjectPrivate *priv)
+{
+ if (!priv || priv->wasDeleted || priv->isDeletingChildren)
+ return true;
+
+ const QQmlData *ddata = QQmlData::get(priv);
+ return ddata && ddata->isQueuedForDeletion;
+}
+
bool QQmlData::wasDeleted(const QObject *object)
{
if (!object)
return true;
const QObjectPrivate *priv = QObjectPrivate::get(object);
- if (!priv || priv->wasDeleted || priv->isDeletingChildren)
- return true;
-
- const QQmlData *ddata = QQmlData::get(object);
- return ddata && ddata->isQueuedForDeletion;
+ return QQmlData::wasDeleted(priv);
}
QQmlNotifierEndpoint *QQmlData::notify(int index)