aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2018-02-26 14:23:26 +0100
committerJ-P Nurmi <jpnurmi@qt.io>2018-02-26 14:17:57 +0000
commit632da6a9871c9b37e8e319eafd9769c6339b8eae (patch)
tree054e60db8f055fb9501163280f71195d7c0afdc6
parentf1f884d353c5a9190e200cc04e94d4658c69a23b (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.cpp9
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)