diff options
Diffstat (limited to 'src/declarative/qml/qmlengine.cpp')
-rw-r--r-- | src/declarative/qml/qmlengine.cpp | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/declarative/qml/qmlengine.cpp b/src/declarative/qml/qmlengine.cpp index 372821e..cdbe5f3 100644 --- a/src/declarative/qml/qmlengine.cpp +++ b/src/declarative/qml/qmlengine.cpp @@ -1085,9 +1085,10 @@ QScriptValue QmlEnginePrivate::tint(QScriptContext *ctxt, QScriptEngine *engine) QScriptValue QmlEnginePrivate::scriptValueFromVariant(const QVariant &val) { - if (QmlMetaType::isObject(val.userType())) { - QObject *rv = *(QObject **)val.constData(); - return objectClass->newQObject(rv); + bool objOk; + QObject *obj = QmlMetaType::toQObject(val, &objOk); + if (objOk) { + return objectClass->newQObject(obj); } else { return qScriptValueFromValue(&scriptEngine, val); } @@ -1598,9 +1599,20 @@ bool QmlEnginePrivate::isQmlList(int t) const return m_qmlLists.contains(t) || QmlMetaType::isQmlList(t); } -bool QmlEnginePrivate::isObject(int t) +bool QmlEnginePrivate::isQObject(int t) { - return m_compositeTypes.contains(t) || QmlMetaType::isObject(t); + return m_compositeTypes.contains(t) || QmlMetaType::isQObject(t); +} + +QObject *QmlEnginePrivate::toQObject(const QVariant &v, bool *ok) const +{ + int t = v.userType(); + if (m_compositeTypes.contains(t)) { + if (ok) *ok = true; + return *(QObject **)(v.constData()); + } else { + return QmlMetaType::toQObject(v, ok); + } } int QmlEnginePrivate::qmlListType(int t) const @@ -1628,7 +1640,8 @@ const QMetaObject *QmlEnginePrivate::rawMetaObjectForType(int t) const if (iter != m_compositeTypes.end()) { return (*iter)->root; } else { - return QmlMetaType::rawMetaObjectForType(t); + QmlType *type = QmlMetaType::qmlType(t); + return type?type->baseMetaObject():0; } } @@ -1638,7 +1651,8 @@ const QMetaObject *QmlEnginePrivate::metaObjectForType(int t) const if (iter != m_compositeTypes.end()) { return (*iter)->root; } else { - return QmlMetaType::metaObjectForType(t); + QmlType *type = QmlMetaType::qmlType(t); + return type?type->metaObject():0; } } |