diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2016-10-20 15:42:27 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2016-11-18 18:57:53 +0000 |
commit | c56cc0c6c229b01811cf41fe2ea02dc3194feaab (patch) | |
tree | b813baceae47205b20083da13600920b9c351962 /src/qml/qml/qqmlmetatype.cpp | |
parent | 0cbda65924ff5440bf283aa7a988f335bba4e660 (diff) |
Introduce qmlRegisterModule()
This is particularly useful for keeping the versions of related modules in
sync. For example, when QtQuick.Controls introduces new types or revisions
and bumps up the minor version, qmlRegisterModule() can be used to make the
same version available for QtQuick.Controls.Styles in case it doesn't have
new types or revisions to register.
[ChangeLog][QtQml] Introduced qmlRegisterModule() that can be used to
make a certain module version available, even if no types or revisions
are registered for that version.
Change-Id: I5ec457465cd778bb0adda55771d195f69cd4b31a
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/qml/qqmlmetatype.cpp')
-rw-r--r-- | src/qml/qml/qqmlmetatype.cpp | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/src/qml/qml/qqmlmetatype.cpp b/src/qml/qml/qqmlmetatype.cpp index 7b758566b7..6a1a90f031 100644 --- a/src/qml/qml/qqmlmetatype.cpp +++ b/src/qml/qml/qqmlmetatype.cpp @@ -1268,6 +1268,19 @@ bool checkRegistration(QQmlType::RegistrationType typeType, QQmlMetaTypeData *da } // NOTE: caller must hold a QMutexLocker on "data" +QQmlTypeModule *getTypeModule(const QHashedString &uri, int majorVersion, QQmlMetaTypeData *data) +{ + QQmlMetaTypeData::VersionedUri versionedUri(uri, majorVersion); + QQmlTypeModule *module = data->uriToModule.value(versionedUri); + if (!module) { + module = new QQmlTypeModule; + module->d->uri = versionedUri; + data->uriToModule.insert(versionedUri, module); + } + return module; +} + +// NOTE: caller must hold a QMutexLocker on "data" void addTypeToData(QQmlType* type, QQmlMetaTypeData *data) { if (!type->elementName().isEmpty()) @@ -1293,13 +1306,8 @@ void addTypeToData(QQmlType* type, QQmlMetaTypeData *data) if (!type->module().isEmpty()) { const QHashedString &mod = type->module(); - QQmlMetaTypeData::VersionedUri versionedUri(mod, type->majorVersion()); - QQmlTypeModule *module = data->uriToModule.value(versionedUri); - if (!module) { - module = new QQmlTypeModule; - module->d->uri = versionedUri; - data->uriToModule.insert(versionedUri, module); - } + QQmlTypeModule *module = getTypeModule(mod, type->majorVersion(), data); + Q_ASSERT(module); module->d->add(type); } } @@ -1442,6 +1450,20 @@ bool qmlProtectModule(const char *uri, int majVersion) return false; } +//From qqml.h +void qmlRegisterModule(const char *uri, int versionMajor, int versionMinor) +{ + QMutexLocker lock(metaTypeDataLock()); + QQmlMetaTypeData *data = metaTypeData(); + + QQmlTypeModule *module = getTypeModule(QString::fromUtf8(uri), versionMajor, data); + Q_ASSERT(module); + + QQmlTypeModulePrivate *p = QQmlTypeModulePrivate::get(module); + p->minMinorVersion = qMin(p->minMinorVersion, versionMinor); + p->maxMinorVersion = qMax(p->maxMinorVersion, versionMinor); +} + bool QQmlMetaType::namespaceContainsRegistrations(const QString &uri, int majorVersion) { const QQmlMetaTypeData *data = metaTypeData(); |