diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2019-02-06 17:18:09 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2019-02-11 10:13:31 +0000 |
commit | a4d6e0676f674bf907d7d33e59bd70b5d5d37da5 (patch) | |
tree | 5537acecffabbda0460f25819b9299e4aace0e07 /src | |
parent | e2fe9d537c8f86a2e1d9cbfaf801fe58f817e9c5 (diff) |
Make QQmlTypePrivate::name safe for usage from different threads
There is hardly a point in setting this lazily. We always set uri and
elementName together anyway.
Change-Id: I5f9f00ee72d78fd8cf66413e81c8d88db1f8a436
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/qml/qqmlmetatype.cpp | 16 | ||||
-rw-r--r-- | src/qml/qml/qqmltype.cpp | 13 | ||||
-rw-r--r-- | src/qml/qml/qqmltype_p_p.h | 3 |
3 files changed, 14 insertions, 18 deletions
diff --git a/src/qml/qml/qqmlmetatype.cpp b/src/qml/qml/qqmlmetatype.cpp index 35340aed47..3764dbd07e 100644 --- a/src/qml/qml/qqmlmetatype.cpp +++ b/src/qml/qml/qqmlmetatype.cpp @@ -101,9 +101,7 @@ static QQmlTypePrivate *createQQmlType(QQmlMetaTypeData *data, const QString &el auto *d = new QQmlTypePrivate(QQmlType::SingletonType); data->registerType(d); - d->elementName = elementName; - d->module = QString::fromUtf8(type.uri); - + d->setName(QString::fromUtf8(type.uri), elementName); d->version_maj = type.versionMajor; d->version_min = type.versionMinor; @@ -131,8 +129,7 @@ static QQmlTypePrivate *createQQmlType(QQmlMetaTypeData *data, const QString &el { QQmlTypePrivate *d = new QQmlTypePrivate(QQmlType::CppType); data->registerType(d); - d->elementName = elementName; - d->module = QString::fromUtf8(type.uri); + d->setName(QString::fromUtf8(type.uri), elementName); d->version_maj = type.versionMajor; d->version_min = type.versionMinor; @@ -177,9 +174,7 @@ static QQmlTypePrivate *createQQmlType(QQmlMetaTypeData *data, const QString &el { auto *d = new QQmlTypePrivate(QQmlType::CompositeType); data->registerType(d); - d->elementName = elementName; - - d->module = QString::fromUtf8(type.uri); + d->setName(QString::fromUtf8(type.uri), elementName); d->version_maj = type.versionMajor; d->version_min = type.versionMinor; @@ -192,8 +187,7 @@ static QQmlTypePrivate *createQQmlType(QQmlMetaTypeData *data, const QString &el { auto *d = new QQmlTypePrivate(QQmlType::CompositeSingletonType); data->registerType(d); - d->elementName = elementName; - d->module = QString::fromUtf8(type.uri); + d->setName(QString::fromUtf8(type.uri), elementName); d->version_maj = type.versionMajor; d->version_min = type.versionMinor; @@ -784,7 +778,7 @@ QQmlType QQmlMetaType::typeForUrl(const QString &urlString, : QQmlType::CompositeType; if (checkRegistration(registrationType, data, nullptr, typeName, majorVersion)) { auto *priv = new QQmlTypePrivate(registrationType); - priv->elementName = typeName; + priv->setName(QString(), typeName); priv->version_maj = majorVersion; priv->version_min = minorVersion; diff --git a/src/qml/qml/qqmltype.cpp b/src/qml/qml/qqmltype.cpp index 2a1b4715d0..a4adb18f76 100644 --- a/src/qml/qml/qqmltype.cpp +++ b/src/qml/qml/qqmltype.cpp @@ -526,6 +526,12 @@ void QQmlTypePrivate::insertEnumsFromPropertyCache(const QQmlPropertyCache *cach insertEnums(cppMetaObject); } +void QQmlTypePrivate::setName(const QString &uri, const QString &element) +{ + module = uri; + elementName = element; + name = uri.isEmpty() ? element : (uri + QLatin1Char('/') + element); +} QQmlPropertyCache *QQmlTypePrivate::propertyCacheForMinorVersion(int minorVersion) const { @@ -568,13 +574,6 @@ QString QQmlType::qmlTypeName() const { if (!d) return QString(); - if (d->name.isEmpty()) { - if (!d->module.isEmpty()) - d->name = static_cast<QString>(d->module) + QLatin1Char('/') + d->elementName; - else - d->name = d->elementName; - } - return d->name; } diff --git a/src/qml/qml/qqmltype_p_p.h b/src/qml/qml/qqmltype_p_p.h index faff0808ec..51984dd360 100644 --- a/src/qml/qml/qqmltype_p_p.h +++ b/src/qml/qml/qqmltype_p_p.h @@ -139,6 +139,9 @@ public: QVector<PropertyCacheByMinorVersion> propertyCaches; QQmlPropertyCache *propertyCacheForMinorVersion(int minorVersion) const; void setPropertyCacheForMinorVersion(int minorVersion, QQmlPropertyCache *cache); + + void setName(const QString &uri, const QString &element); + private: struct EnumInfo { QStringList path; |