diff options
author | Alan Alpert <alan.alpert@nokia.com> | 2009-11-12 03:10:30 (GMT) |
---|---|---|
committer | Alan Alpert <alan.alpert@nokia.com> | 2009-11-12 03:10:30 (GMT) |
commit | f37cf664b243612583140f1ccdff476edf00f975 (patch) | |
tree | 801d542b6f42abb5a1f9c65e67175324422b6810 /src/declarative | |
parent | 4912e1947c15a8694a89719989e5beb56fa7fed8 (diff) | |
parent | 8905d8445dfe8977441302003fa21dde140fa0fe (diff) | |
download | Qt-f37cf664b243612583140f1ccdff476edf00f975.zip Qt-f37cf664b243612583140f1ccdff476edf00f975.tar.gz Qt-f37cf664b243612583140f1ccdff476edf00f975.tar.bz2 |
Merge branch 'kinetic-declarativeui' of git@scm.dev.nokia.troll.no:qt/kinetic into kinetic-declarativeui
Diffstat (limited to 'src/declarative')
-rw-r--r-- | src/declarative/qml/qmlbinding.cpp | 13 | ||||
-rw-r--r-- | src/declarative/qml/qmlcompiler.cpp | 5 | ||||
-rw-r--r-- | src/declarative/qml/qmlvmemetaobject.cpp | 11 | ||||
-rw-r--r-- | src/declarative/qml/qmlvmemetaobject_p.h | 3 |
4 files changed, 26 insertions, 6 deletions
diff --git a/src/declarative/qml/qmlbinding.cpp b/src/declarative/qml/qmlbinding.cpp index b0a4d6e..ef92308 100644 --- a/src/declarative/qml/qmlbinding.cpp +++ b/src/declarative/qml/qmlbinding.cpp @@ -175,7 +175,18 @@ void QmlBinding::update(QmlMetaProperty::WriteFlags flags) bool isUndefined = false; QVariant value = this->value(&isUndefined); - if (!isUndefined && data->property.object() && + if (isUndefined && !data->error.isValid()) { + + QUrl url = data->url; + int line = data->line; + if (url.isEmpty()) url = QUrl(QLatin1String("<Unknown File>")); + + data->error.setUrl(url); + data->error.setLine(line); + data->error.setColumn(-1); + data->error.setDescription(QLatin1String("Unable to assign [undefined] to ") + QLatin1String(QMetaType::typeName(data->property.propertyType()))); + + } else if (!isUndefined && data->property.object() && !data->property.write(value, flags)) { QUrl url = data->url; diff --git a/src/declarative/qml/qmlcompiler.cpp b/src/declarative/qml/qmlcompiler.cpp index 8e92eb4..81ebd86 100644 --- a/src/declarative/qml/qmlcompiler.cpp +++ b/src/declarative/qml/qmlcompiler.cpp @@ -2340,6 +2340,7 @@ bool QmlCompiler::compileAlias(QMetaObjectBuilder &builder, QByteArray typeName; int propIdx = -1; + int flags = 0; bool writable = false; if (alias.count() == 2) { propIdx = idObject->metaObject()->indexOfProperty(alias.at(1).toUtf8().constData()); @@ -2359,8 +2360,12 @@ bool QmlCompiler::compileAlias(QMetaObjectBuilder &builder, typeName += "*"; } + if (typeName.endsWith('*')) + flags |= QML_ALIAS_FLAG_PTR; + data.append((const char *)&idObject->idIndex, sizeof(idObject->idIndex)); data.append((const char *)&propIdx, sizeof(propIdx)); + data.append((const char *)&flags, sizeof(flags)); builder.addSignal(prop.name + "Changed()"); QMetaPropertyBuilder propBuilder = diff --git a/src/declarative/qml/qmlvmemetaobject.cpp b/src/declarative/qml/qmlvmemetaobject.cpp index 5315089..ed28d78 100644 --- a/src/declarative/qml/qmlvmemetaobject.cpp +++ b/src/declarative/qml/qmlvmemetaobject.cpp @@ -210,17 +210,18 @@ int QmlVMEMetaObject::metaCall(QMetaObject::Call c, int _id, void **a) if (id < metaData->aliasCount) { - if (!ctxt) return -1; QmlVMEMetaData::AliasData *d = metaData->aliasData() + id; + + if (d->flags & QML_ALIAS_FLAG_PTR && c == QMetaObject::ReadProperty) + *reinterpret_cast<void **>(a[0]) = 0; + + if (!ctxt) return -1; QmlContextPrivate *ctxtPriv = (QmlContextPrivate *)QObjectPrivate::get(ctxt); QObject *target = ctxtPriv->idValues[d->contextIdx].data(); - if (!target) { - if (d->propertyIdx == -1) - *reinterpret_cast<QObject **>(a[0]) = target; + if (!target) return -1; - } if (c == QMetaObject::ReadProperty && !aConnected.testBit(id)) { int sigIdx = methodOffset + id + metaData->propertyCount; diff --git a/src/declarative/qml/qmlvmemetaobject_p.h b/src/declarative/qml/qmlvmemetaobject_p.h index 9262b19..f2ee09b 100644 --- a/src/declarative/qml/qmlvmemetaobject_p.h +++ b/src/declarative/qml/qmlvmemetaobject_p.h @@ -61,6 +61,8 @@ QT_BEGIN_NAMESPACE +#define QML_ALIAS_FLAG_PTR 0x00000001 + struct QmlVMEMetaData { short propertyCount; @@ -71,6 +73,7 @@ struct QmlVMEMetaData struct AliasData { int contextIdx; int propertyIdx; + int flags; }; struct PropertyData { |