diff options
author | Matthew Vogt <matthew.vogt@nokia.com> | 2012-08-01 10:27:17 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-08-10 05:40:49 +0200 |
commit | 4350877d6deb58f36df24164c6edde3302a3f1a3 (patch) | |
tree | 5b1b121c1ce21aff1717de500282a5951f4e1267 /src/qml/qml/v8 | |
parent | 34ae6deb78c30a80570e0c0dda7b2f071abdbf68 (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.cpp | 10 | ||||
-rw-r--r-- | src/qml/qml/v8/qv8qobjectwrapper.cpp | 15 | ||||
-rw-r--r-- | src/qml/qml/v8/qv8valuetypewrapper.cpp | 5 |
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; } |