diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2018-02-26 14:23:26 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2018-02-26 14:17:57 +0000 |
commit | 632da6a9871c9b37e8e319eafd9769c6339b8eae (patch) | |
tree | 054e60db8f055fb9501163280f71195d7c0afdc6 | |
parent | f1f884d353c5a9190e200cc04e94d4658c69a23b (diff) |
Fix quickCancelDeferred()
Don't assume that declarative data (QQmlData) exists. It doesn't exist
for items that have been created outside of QML, which is the case for
those content items that are lazily created from C++, for example.
Task-number: QTBUG-66669
Change-Id: Ib18455b275034dc2aec6d2405c0c2509d39fc77d
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
-rw-r--r-- | src/quicktemplates2/qquickdeferredexecute.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/quicktemplates2/qquickdeferredexecute.cpp b/src/quicktemplates2/qquickdeferredexecute.cpp index ca6953bc..b298a81d 100644 --- a/src/quicktemplates2/qquickdeferredexecute.cpp +++ b/src/quicktemplates2/qquickdeferredexecute.cpp @@ -55,9 +55,8 @@ static inline uint qHash(QObject *object, const QString &propertyName) Q_GLOBAL_STATIC(DeferredStates, deferredStates) -static void cancelDeferred(QObject *object, int propertyIndex) +static void cancelDeferred(QQmlData *ddata, int propertyIndex) { - QQmlData *ddata = QQmlData::get(object); auto dit = ddata->deferredData.rbegin(); while (dit != ddata->deferredData.rend()) { (*dit)->bindings.remove(propertyIndex); @@ -102,7 +101,7 @@ static bool beginDeferred(QQmlEnginePrivate *enginePriv, const QQmlProperty &pro // Cleanup any remaining deferred bindings for this property, also in inner contexts, // to avoid executing them later and overriding the property that was just populated. - cancelDeferred(object, propertyIndex); + cancelDeferred(ddata, propertyIndex); break; } @@ -128,7 +127,9 @@ void beginDeferred(QObject *object, const QString &property) void cancelDeferred(QObject *object, const QString &property) { - cancelDeferred(object, QQmlProperty(object, property).index()); + QQmlData *data = QQmlData::get(object); + if (data) + cancelDeferred(data, QQmlProperty(object, property).index()); } void completeDeferred(QObject *object, const QString &property) |