diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2019-10-22 11:22:11 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2019-11-07 16:10:50 +0100 |
commit | ce40ac9ed7255c36acdee69b06a7832e492c3fc8 (patch) | |
tree | dbe398ae0afecc181d9ab7cdabfe1f4d3fd799ef /src | |
parent | 50bce248ab6ec4d1e39b85029297dc5d5d80f195 (diff) |
Register compiled-in QML types
If we compile the QML types into the main application we cannot depend
on plugin loading for triggering the registration. Rather, we need to
register them immediately.
Change-Id: I910fb13359f8b7524eafd7693c85205cb4ed4cd8
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/qml/qqmlmetatype.cpp | 4 | ||||
-rw-r--r-- | src/qml/qml/qqmlmetatype_p.h | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmlmetatypedata.cpp | 7 | ||||
-rw-r--r-- | src/qml/qml/qqmlmetatypedata_p.h | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmltypeloader.cpp | 3 |
5 files changed, 11 insertions, 7 deletions
diff --git a/src/qml/qml/qqmlmetatype.cpp b/src/qml/qml/qqmlmetatype.cpp index af43bfc921..b8c17c9374 100644 --- a/src/qml/qml/qqmlmetatype.cpp +++ b/src/qml/qml/qqmlmetatype.cpp @@ -278,10 +278,10 @@ void QQmlMetaType::qmlInsertModuleRegistration(const QString &uri, int majorVers data->moduleTypeRegistrationFunctions.insert(versionedUri, registerFunction); } -void QQmlMetaType::qmlRegisterModuleTypes(const QString &uri, int majorVersion) +bool QQmlMetaType::qmlRegisterModuleTypes(const QString &uri, int majorVersion) { QQmlMetaTypeDataPtr data; - data->registerModuleTypes(QQmlMetaTypeData::VersionedUri(uri, majorVersion)); + return data->registerModuleTypes(QQmlMetaTypeData::VersionedUri(uri, majorVersion)); } void QQmlMetaType::clearTypeRegistrations() diff --git a/src/qml/qml/qqmlmetatype_p.h b/src/qml/qml/qqmlmetatype_p.h index 146a5ab136..ed4675046d 100644 --- a/src/qml/qml/qqmlmetatype_p.h +++ b/src/qml/qml/qqmlmetatype_p.h @@ -200,7 +200,7 @@ public: static void qmlInsertModuleRegistration(const QString &uri, int majorVersion, void (*registerFunction)()); - static void qmlRegisterModuleTypes(const QString &uri, int majorVersion); + static bool qmlRegisterModuleTypes(const QString &uri, int majorVersion); }; Q_DECLARE_TYPEINFO(QQmlMetaType, Q_MOVABLE_TYPE); diff --git a/src/qml/qml/qqmlmetatypedata.cpp b/src/qml/qml/qqmlmetatypedata.cpp index c2150225c3..ed885eaa97 100644 --- a/src/qml/qml/qqmlmetatypedata.cpp +++ b/src/qml/qml/qqmlmetatypedata.cpp @@ -78,11 +78,14 @@ void QQmlMetaTypeData::registerType(QQmlTypePrivate *priv) priv->release(); } -void QQmlMetaTypeData::registerModuleTypes(const QQmlMetaTypeData::VersionedUri &versionedUri) +bool QQmlMetaTypeData::registerModuleTypes(const QQmlMetaTypeData::VersionedUri &versionedUri) { auto function = moduleTypeRegistrationFunctions.constFind(versionedUri); - if (function != moduleTypeRegistrationFunctions.constEnd()) + if (function != moduleTypeRegistrationFunctions.constEnd()) { (*function)(); + return true; + } + return false; } QQmlPropertyCache *QQmlMetaTypeData::propertyCacheForMinorVersion(int index, int minorVersion) const diff --git a/src/qml/qml/qqmlmetatypedata_p.h b/src/qml/qml/qqmlmetatypedata_p.h index 755a51a16e..f193e51f5a 100644 --- a/src/qml/qml/qqmlmetatypedata_p.h +++ b/src/qml/qml/qqmlmetatypedata_p.h @@ -101,7 +101,7 @@ struct QQmlMetaTypeData TypeModules uriToModule; QHash<VersionedUri, void (*)()> moduleTypeRegistrationFunctions; - void registerModuleTypes(const VersionedUri &versionedUri); + bool registerModuleTypes(const VersionedUri &versionedUri); QBitArray objects; QBitArray interfaces; diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp index c2870396b0..b164f5873c 100644 --- a/src/qml/qml/qqmltypeloader.cpp +++ b/src/qml/qml/qqmltypeloader.cpp @@ -598,7 +598,8 @@ bool QQmlTypeLoader::Blob::addImport(QQmlTypeLoader::Blob::PendingImportPtr impo } } else { // Is this a module? - if (QQmlMetaType::isAnyModule(import->uri)) { + if (QQmlMetaType::isAnyModule(import->uri) + || QQmlMetaType::qmlRegisterModuleTypes(import->uri, import->majorVersion)) { if (!m_importCache.addLibraryImport(importDatabase, import->uri, import->qualifier, import->majorVersion, import->minorVersion, QString(), QString(), false, errors)) return false; |