diff options
Diffstat (limited to 'src/qml/qml/qqmlpropertycache.cpp')
-rw-r--r-- | src/qml/qml/qqmlpropertycache.cpp | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/src/qml/qml/qqmlpropertycache.cpp b/src/qml/qml/qqmlpropertycache.cpp index 5c53e342f3..ed00eddb30 100644 --- a/src/qml/qml/qqmlpropertycache.cpp +++ b/src/qml/qml/qqmlpropertycache.cpp @@ -150,7 +150,7 @@ void QQmlPropertyData::lazyLoad(const QMetaProperty &p) Q_ASSERT(p.revision() <= Q_INT16_MAX); setRevision(p.revision()); - _flags = fastFlagsForProperty(p); + setFlags(fastFlagsForProperty(p)); int type = static_cast<int>(p.type()); if (type == QMetaType::QObjectStar) { @@ -171,7 +171,7 @@ void QQmlPropertyData::load(const QMetaProperty &p, QQmlEngine *engine) setPropType(p.userType()); setCoreIndex(p.propertyIndex()); setNotifyIndex(QMetaObjectPrivate::signalIndex(p.notifySignal())); - _flags = fastFlagsForProperty(p); + setFlags(fastFlagsForProperty(p)); flagsForPropertyType(propType(), engine, _flags); Q_ASSERT(p.revision() <= Q_INT16_MAX); setRevision(p.revision()); @@ -344,7 +344,7 @@ void QQmlPropertyCache::appendProperty(const QString &name, QQmlPropertyData::Fl data.setPropType(propType); data.setCoreIndex(coreIndex); data.setNotifyIndex(notifyIndex); - data._flags = flags; + data.setFlags(flags); QQmlPropertyData *old = findNamedProperty(name); if (old) @@ -363,7 +363,7 @@ void QQmlPropertyCache::appendSignal(const QString &name, QQmlPropertyData::Flag QQmlPropertyData data; data.setPropType(QVariant::Invalid); data.setCoreIndex(coreIndex); - data._flags = flags; + data.setFlags(flags); data.setArguments(nullptr); QQmlPropertyData handler = data; @@ -409,7 +409,7 @@ void QQmlPropertyCache::appendMethod(const QString &name, QQmlPropertyData::Flag args->argumentsValid = true; data.setArguments(args); - data._flags = flags; + data.setFlags(flags); QQmlPropertyData *old = findNamedProperty(name); if (old) @@ -568,9 +568,9 @@ void QQmlPropertyCache::append(const QMetaObject *metaObject, QQmlPropertyData *sigdata = 0; if (m.methodType() == QMetaMethod::Signal) - data->_flags = signalFlags; + data->setFlags(signalFlags); else - data->_flags = methodFlags; + data->setFlags(methodFlags); data->lazyLoad(m); data->_flags.isDirect = !dynamicMetaObject; @@ -650,7 +650,7 @@ void QQmlPropertyCache::append(const QMetaObject *metaObject, QQmlPropertyData *data = &propertyIndexCache[ii - propertyIndexCacheStart]; - data->_flags = propertyFlags; + data->setFlags(propertyFlags); data->lazyLoad(p); data->_flags.isDirect = !dynamicMetaObject; @@ -672,16 +672,18 @@ void QQmlPropertyCache::append(const QMetaObject *metaObject, setNamedProperty(propName, ii, data, (old != 0)); } - QQmlAccessorProperties::Property *accessorProperty = accessorProperties.property(str); - - // Fast properties may not be overrides or revisioned - Q_ASSERT(accessorProperty == 0 || (old == 0 && data->revision() == 0)); + bool isGadget = true; + for (const QMetaObject *it = metaObject; it != nullptr; it = it->superClass()) { + if (it == &QObject::staticMetaObject) + isGadget = false; + } - if (accessorProperty) { - data->setAccessors(accessorProperty->accessors); - } else if (old) { + if (isGadget) // always dispatch over a 'normal' meta-call so the QQmlValueType can intercept + data->_flags.isDirect = false; + else + data->trySetStaticMetaCallFunction(metaObject->d.static_metacall, ii - propOffset); + if (old) data->markAsOverrideOf(old); - } } } |