aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmltype.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/qml/qqmltype.cpp')
-rw-r--r--src/qml/qml/qqmltype.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/qml/qml/qqmltype.cpp b/src/qml/qml/qqmltype.cpp
index a4f7c3f8b5..e5b3653d2d 100644
--- a/src/qml/qml/qqmltype.cpp
+++ b/src/qml/qml/qqmltype.cpp
@@ -217,7 +217,7 @@ void QQmlTypePrivate::init() const
if (regType == QQmlType::CppType) {
// Setup extended meta object
// XXX - very inefficient
- if (extraData.cd->extFunc) {
+ if (extraData.cd->extMetaObject) {
QMetaObjectBuilder builder;
QQmlMetaType::clone(builder, extraData.cd->extMetaObject, extraData.cd->extMetaObject,
extraData.cd->extMetaObject);
@@ -269,14 +269,15 @@ void QQmlTypePrivate::initEnums(QQmlEnginePrivate *engine) const
? compositePropertyCache(engine)
: nullptr;
+ // beware: It could be a singleton type without metaobject
const QMetaObject *metaObject = !isEnumFromBaseSetup.loadAcquire()
- ? baseMetaObject // beware: It could be a singleton type without metaobject
+ ? baseMetaObject
: nullptr;
if (!cache && !metaObject)
return;
- init();
+ init(); // init() can add to the metaObjects list. Therefore, check metaObjects only below
QMutexLocker lock(QQmlMetaType::typeRegistrationLock());
@@ -286,7 +287,7 @@ void QQmlTypePrivate::initEnums(QQmlEnginePrivate *engine) const
}
if (metaObject) {
- insertEnums(metaObject);
+ insertEnums(metaObjects.isEmpty() ? baseMetaObject : metaObjects.constFirst().metaObject);
isEnumFromBaseSetup.storeRelease(true);
}
}