summaryrefslogtreecommitdiffstats
path: root/src/declarative/qml/qmlcompiler.cpp
diff options
context:
space:
mode:
authorAaron Kennedy <aaron.kennedy@nokia.com>2009-10-12 03:58:42 (GMT)
committerAaron Kennedy <aaron.kennedy@nokia.com>2009-10-12 03:58:42 (GMT)
commit1ea93870fce7ff032053775fb19d42e950dd5ccb (patch)
treeccdf099207d295b062a1abde307da3b5057e771a /src/declarative/qml/qmlcompiler.cpp
parent55e4d0591a2b18e08519144a416d1fea9a625cd8 (diff)
downloadQt-1ea93870fce7ff032053775fb19d42e950dd5ccb.zip
Qt-1ea93870fce7ff032053775fb19d42e950dd5ccb.tar.gz
Qt-1ea93870fce7ff032053775fb19d42e950dd5ccb.tar.bz2
Composite types should assign to object properties
Fixes QT-956
Diffstat (limited to 'src/declarative/qml/qmlcompiler.cpp')
-rw-r--r--src/declarative/qml/qmlcompiler.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/declarative/qml/qmlcompiler.cpp b/src/declarative/qml/qmlcompiler.cpp
index 48d3360..6d1df6d 100644
--- a/src/declarative/qml/qmlcompiler.cpp
+++ b/src/declarative/qml/qmlcompiler.cpp
@@ -647,7 +647,13 @@ void QmlCompiler::compileTree(Object *tree)
output->importCache = output->imports.cache(engine);
Q_ASSERT(tree->metatype);
- static_cast<QMetaObject &>(output->root) = *tree->metaObject();
+
+ if (tree->metadata.isEmpty()) {
+ output->root = tree->metatype;
+ } else {
+ static_cast<QMetaObject &>(output->rootData) = *tree->metaObject();
+ output->root = &output->rootData;
+ }
if (!tree->metadata.isEmpty())
QmlEnginePrivate::get(engine)->registerCompositeType(output);
}
@@ -1905,7 +1911,7 @@ bool QmlCompiler::buildPropertyObjectAssignment(QmlParser::Property *prop,
if (propertyMetaObject) {
const QMetaObject *c = v->object->metatype;
while(c) {
- isAssignable |= (c == propertyMetaObject);
+ isAssignable |= (QmlMetaPropertyPrivate::equal(c, propertyMetaObject));
c = c->superClass();
}
}
@@ -2101,7 +2107,7 @@ bool QmlCompiler::buildDynamicMeta(QmlParser::Object *obj, DynamicMetaMode mode)
Q_ASSERT(tdata->status == QmlCompositeTypeData::Complete);
QmlCompiledData *data = tdata->toCompiledComponent(engine);
- customTypeName = data->root.className();
+ customTypeName = data->root->className();
} else {
customTypeName = qmltype->typeName();
}
@@ -2473,7 +2479,7 @@ bool QmlCompiler::canCoerce(int to, QmlParser::Object *from)
const QMetaObject *fromMo = from->metaObject();
while (fromMo) {
- if (fromMo == toMo)
+ if (QmlMetaPropertyPrivate::equal(fromMo, toMo))
return true;
fromMo = fromMo->superClass();
}
@@ -2492,7 +2498,7 @@ bool QmlCompiler::canCoerce(int to, int from)
QmlEnginePrivate::get(engine)->rawMetaObjectForType(from);
while (fromMo) {
- if (fromMo == toMo)
+ if (QmlMetaPropertyPrivate::equal(fromMo, toMo))
return true;
fromMo = fromMo->superClass();
}