From 632da6a9871c9b37e8e319eafd9769c6339b8eae Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Mon, 26 Feb 2018 14:23:26 +0100 Subject: 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 --- src/quicktemplates2/qquickdeferredexecute.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src') 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) -- cgit v1.2.3