aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlmetatype.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/qml/qqmlmetatype.cpp')
-rw-r--r--src/qml/qml/qqmlmetatype.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/qml/qml/qqmlmetatype.cpp b/src/qml/qml/qqmlmetatype.cpp
index dea976c4ee..e3083ae278 100644
--- a/src/qml/qml/qqmlmetatype.cpp
+++ b/src/qml/qml/qqmlmetatype.cpp
@@ -400,13 +400,22 @@ bool checkRegistration(QQmlType::RegistrationType typeType, QQmlMetaTypeData *da
QMetaType::TypeFlags flags)
{
if (!typeName.isEmpty()) {
- if (typeName.at(0).isLower()
- && !(flags & (QMetaType::PointerToGadget | QMetaType::IsGadget))) {
+ if (typeName.at(0).isLower() && (flags & QMetaType::PointerToQObject)) {
QString failure(QCoreApplication::translate("qmlRegisterType", "Invalid QML %1 name \"%2\"; type names must begin with an uppercase letter"));
data->recordTypeRegFailure(failure.arg(registrationTypeString(typeType)).arg(typeName));
return false;
}
+ if (typeName.at(0).isUpper()
+ && (flags & (QMetaType::IsGadget | QMetaType::PointerToGadget))) {
+ QString failure(QCoreApplication::translate("qmlRegisterType", "Invalid QML %1 name \"%2\"; value type names must begin with a lowercase letter"));
+ data->recordTypeRegFailure(failure.arg(registrationTypeString(typeType)).arg(typeName));
+ return false;
+ }
+
+ // There can also be types that aren't even gadgets, and there can be types for namespaces.
+ // We cannot check those, but namespaces should be uppercase.
+
int typeNameLen = typeName.length();
for (int ii = 0; ii < typeNameLen; ++ii) {
if (!(typeName.at(ii).isLetterOrNumber() || typeName.at(ii) == u'_')) {
@@ -455,7 +464,8 @@ void addTypeToData(QQmlTypePrivate *type, QQmlMetaTypeData *data)
if (type->typeId.isValid()) {
data->idToType.insert(type->typeId.id(), type);
- data->objects.insert(type->typeId.id());
+ if (type->typeId.flags() & QMetaType::PointerToQObject)
+ data->objects.insert(type->typeId.id());
}
if (type->listId.isValid()) {