diff options
author | Fabian Kosmale <fabian.kosmale@qt.io> | 2021-12-01 08:56:25 +0100 |
---|---|---|
committer | Fabian Kosmale <fabian.kosmale@qt.io> | 2021-12-02 12:52:30 +0100 |
commit | feeec1920b924beb75a8cb319a46ba749d052f86 (patch) | |
tree | b19f62d93e7952a47d45ab1ebef077a7afb4ebdf /src/qml/qml/qqmldata_p.h | |
parent | 7ff266ff782b35817d3ecc1a08c3a54bd2c2aa88 (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.h | 27 |
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) |