aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/v8
diff options
context:
space:
mode:
authorMatthew Vogt <matthew.vogt@nokia.com>2012-08-01 10:27:17 +1000
committerQt by Nokia <qt-info@nokia.com>2012-08-10 05:40:49 +0200
commit4350877d6deb58f36df24164c6edde3302a3f1a3 (patch)
tree5b1b121c1ce21aff1717de500282a5951f4e1267 /src/qml/qml/v8
parent34ae6deb78c30a80570e0c0dda7b2f071abdbf68 (diff)
Permit value types with metatype IDs >= QMetaType::User
Remove the assumption that value types must be types defined by Qt, having metatype IDs below QMetaType::User. Task-number: QTBUG-26352 Change-Id: Ib5a56ff2e7892e82adf17a3a1e7517a0c9fe0534 Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
Diffstat (limited to 'src/qml/qml/v8')
-rw-r--r--src/qml/qml/v8/qv8engine.cpp10
-rw-r--r--src/qml/qml/v8/qv8qobjectwrapper.cpp15
-rw-r--r--src/qml/qml/v8/qv8valuetypewrapper.cpp5
3 files changed, 13 insertions, 17 deletions
diff --git a/src/qml/qml/v8/qv8engine.cpp b/src/qml/qml/v8/qv8engine.cpp
index 7eabd96745..7972e85315 100644
--- a/src/qml/qml/v8/qv8engine.cpp
+++ b/src/qml/qml/v8/qv8engine.cpp
@@ -397,11 +397,8 @@ v8::Handle<v8::Value> QV8Engine::fromVariant(const QVariant &variant)
break;
}
- if (m_engine) {
- if (QQmlValueType *vt = QQmlEnginePrivate::get(m_engine)->valueTypes[type])
- return m_valueTypeWrapper.newValueType(variant, vt);
- }
-
+ if (QQmlValueType *vt = QQmlValueTypeFactory::valueType(type))
+ return m_valueTypeWrapper.newValueType(variant, vt);
} else {
if (type == qMetaTypeId<QQmlListReference>()) {
typedef QQmlListReferencePrivate QDLRP;
@@ -435,6 +432,9 @@ v8::Handle<v8::Value> QV8Engine::fromVariant(const QVariant &variant)
v8::Handle<v8::Value> retn = m_sequenceWrapper.fromVariant(variant, &succeeded);
if (succeeded)
return retn;
+
+ if (QQmlValueType *vt = QQmlValueTypeFactory::valueType(type))
+ return m_valueTypeWrapper.newValueType(variant, vt);
}
// XXX TODO: To be compatible, we still need to handle:
diff --git a/src/qml/qml/v8/qv8qobjectwrapper.cpp b/src/qml/qml/v8/qv8qobjectwrapper.cpp
index bee176f829..14694a52fd 100644
--- a/src/qml/qml/v8/qv8qobjectwrapper.cpp
+++ b/src/qml/qml/v8/qv8qobjectwrapper.cpp
@@ -440,20 +440,17 @@ static v8::Handle<v8::Value> LoadProperty(QV8Engine *engine, QObject *object,
} else if (property.isQVariant()) {
QVariant v;
ReadFunction(object, property, &v, notifier);
- if (QQmlValueTypeFactory::isValueType(v.userType()) && engine->engine()) {
- QQmlEnginePrivate *ep = QQmlEnginePrivate::get(engine->engine());
- QQmlValueType *valueType = ep->valueTypes[v.userType()];
- if (valueType)
+
+ if (QQmlValueTypeFactory::isValueType(v.userType())) {
+ if (QQmlValueType *valueType = QQmlValueTypeFactory::valueType(v.userType()))
return engine->newValueType(object, property.coreIndex, valueType); // VariantReference value-type.
}
+
return engine->fromVariant(v);
- } else if (QQmlValueTypeFactory::isValueType((uint)property.propType)
- && engine->engine()) {
+ } else if (QQmlValueTypeFactory::isValueType(property.propType)) {
Q_ASSERT(notifier == 0);
- QQmlEnginePrivate *ep = QQmlEnginePrivate::get(engine->engine());
- QQmlValueType *valueType = ep->valueTypes[property.propType];
- if (valueType)
+ if (QQmlValueType *valueType = QQmlValueTypeFactory::valueType(property.propType))
return engine->newValueType(object, property.coreIndex, valueType);
} else {
Q_ASSERT(notifier == 0);
diff --git a/src/qml/qml/v8/qv8valuetypewrapper.cpp b/src/qml/qml/v8/qv8valuetypewrapper.cpp
index fe58546522..91875150ec 100644
--- a/src/qml/qml/v8/qv8valuetypewrapper.cpp
+++ b/src/qml/qml/v8/qv8valuetypewrapper.cpp
@@ -164,9 +164,8 @@ static bool readReferenceValue(QV8ValueTypeReferenceResource *reference)
// overwritten with a different type in the meantime.
// We need to modify this reference to the updated value type, if
// possible, or return false if it is not a value type.
- QQmlEngine *e = reference->engine->engine();
- if (QQmlValueTypeFactory::isValueType(variantReferenceType) && e) {
- reference->type = QQmlEnginePrivate::get(e)->valueTypes[variantReferenceType];
+ if (QQmlValueTypeFactory::isValueType(variantReferenceType)) {
+ reference->type = QQmlValueTypeFactory::valueType(variantReferenceType);
if (!reference->type) {
return false;
}