diff options
Diffstat (limited to 'src/qml/qml/qqmlmetatype.cpp')
-rw-r--r-- | src/qml/qml/qqmlmetatype.cpp | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/src/qml/qml/qqmlmetatype.cpp b/src/qml/qml/qqmlmetatype.cpp index b8c17c9374..f506cdece3 100644 --- a/src/qml/qml/qqmlmetatype.cpp +++ b/src/qml/qml/qqmlmetatype.cpp @@ -273,11 +273,25 @@ void QQmlMetaType::qmlInsertModuleRegistration(const QString &uri, int majorVers const QQmlMetaTypeData::VersionedUri versionedUri(uri, majorVersion); QQmlMetaTypeDataPtr data; if (data->moduleTypeRegistrationFunctions.contains(versionedUri)) - qFatal("Canot add multiple registrations for %s %d", qPrintable(uri), majorVersion); + qFatal("Cannot add multiple registrations for %s %d", qPrintable(uri), majorVersion); else data->moduleTypeRegistrationFunctions.insert(versionedUri, registerFunction); } +void QQmlMetaType::qmlRemoveModuleRegistration(const QString &uri, int majorVersion) +{ + const QQmlMetaTypeData::VersionedUri versionedUri(uri, majorVersion); + QQmlMetaTypeDataPtr data; + + if (!data.isValid()) + return; // shutdown/deletion race. Not a problem. + + if (!data->moduleTypeRegistrationFunctions.contains(versionedUri)) + qFatal("Cannot remove multiple registrations for %s %d", qPrintable(uri), majorVersion); + else + data->moduleTypeRegistrationFunctions.remove(versionedUri); +} + bool QQmlMetaType::qmlRegisterModuleTypes(const QString &uri, int majorVersion) { QQmlMetaTypeDataPtr data; @@ -329,7 +343,6 @@ QQmlType QQmlMetaType::registerInterface(const QQmlPrivate::RegisterInterface &t data->idToType.insert(priv->typeId, priv); data->idToType.insert(priv->listId, priv); - // XXX No insertMulti, so no multi-version interfaces? if (!priv->elementName.isEmpty()) data->nameToType.insert(priv->elementName, priv); @@ -414,10 +427,10 @@ void addTypeToData(QQmlTypePrivate *type, QQmlMetaTypeData *data) Q_ASSERT(type); if (!type->elementName.isEmpty()) - data->nameToType.insertMulti(type->elementName, type); + data->nameToType.insert(type->elementName, type); if (type->baseMetaObject) - data->metaObjectToType.insertMulti(type->baseMetaObject, type); + data->metaObjectToType.insert(type->baseMetaObject, type); if (type->typeId) { data->idToType.insert(type->typeId, type); @@ -492,7 +505,7 @@ QQmlType QQmlMetaType::registerCompositeSingletonType(const QQmlPrivate::Registe addTypeToData(priv, data); QQmlMetaTypeData::Files *files = fileImport ? &(data->urlToType) : &(data->urlToNonFileImportType); - files->insertMulti(QQmlTypeLoader::normalize(type.url), priv); + files->insert(QQmlTypeLoader::normalize(type.url), priv); return QQmlType(priv); } @@ -513,7 +526,7 @@ QQmlType QQmlMetaType::registerCompositeType(const QQmlPrivate::RegisterComposit addTypeToData(priv, data); QQmlMetaTypeData::Files *files = fileImport ? &(data->urlToType) : &(data->urlToNonFileImportType); - files->insertMulti(QQmlTypeLoader::normalize(type.url), priv); + files->insert(QQmlTypeLoader::normalize(type.url), priv); return QQmlType(priv); } @@ -797,7 +810,7 @@ QQmlType QQmlMetaType::typeForUrl(const QString &urlString, data->registerType(priv); addTypeToData(priv, data); - data->urlToType.insertMulti(url, priv); + data->urlToType.insert(url, priv); return QQmlType(priv); } @@ -927,11 +940,11 @@ int QQmlMetaType::attachedPropertiesFuncId(QQmlEnginePrivate *engine, const QMet for (auto it = data->metaObjectToType.constFind(mo), end = data->metaObjectToType.constEnd(); it != end && it.key() == mo; ++it) { - const QQmlType type(it.value()); - if (type.attachedPropertiesFunction(engine)) - return type.attachedPropertiesId(engine); + if (const QQmlTypePrivate *type = it.value()) { + if (const QQmlTypePrivate *base = type->attachedPropertiesBase(engine)) + return base->index; + } } - return -1; } |