aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2019-02-06 17:18:09 +0100
committerUlf Hermann <ulf.hermann@qt.io>2019-02-11 10:13:31 +0000
commita4d6e0676f674bf907d7d33e59bd70b5d5d37da5 (patch)
tree5537acecffabbda0460f25819b9299e4aace0e07 /src
parente2fe9d537c8f86a2e1d9cbfaf801fe58f817e9c5 (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.cpp16
-rw-r--r--src/qml/qml/qqmltype.cpp13
-rw-r--r--src/qml/qml/qqmltype_p_p.h3
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;