diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2011-04-15 01:48:06 (GMT) |
---|---|---|
committer | Aaron Kennedy <aaron.kennedy@nokia.com> | 2011-04-15 01:48:06 (GMT) |
commit | b4b85257ccff6ba21bcbcbd46a9f7f09884abe79 (patch) | |
tree | 394547f947fcc2b1f1e9cc75bb779509d08bd356 /src/declarative | |
parent | ead56475cc6ecd7a6e7e17d63f0e22cf930bcae4 (diff) | |
download | Qt-b4b85257ccff6ba21bcbcbd46a9f7f09884abe79.zip Qt-b4b85257ccff6ba21bcbcbd46a9f7f09884abe79.tar.gz Qt-b4b85257ccff6ba21bcbcbd46a9f7f09884abe79.tar.bz2 |
Resolve unqualified attached properties correctly
When resolving unqualified attached properties, we should use the scope
object, not the context object. Otherwise they will always resolve to the
root object of the context, regardless of where they are written.
In this example,
QtObject {
id: root
QtObject {
id: me
property int a: AttachedObject.x
}
}
the attached object should be loaded on the "me" object, not the "root"
object.
Change-Id: I386f886f62df7b8020c3ff703cdfc891d5739713
Reviewed-by: Martin Jones
Diffstat (limited to 'src/declarative')
-rw-r--r-- | src/declarative/qml/qdeclarativecontextscriptclass.cpp | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/declarative/qml/qdeclarativecontextscriptclass.cpp b/src/declarative/qml/qdeclarativecontextscriptclass.cpp index bb4ece4..3abd787 100644 --- a/src/declarative/qml/qdeclarativecontextscriptclass.cpp +++ b/src/declarative/qml/qdeclarativecontextscriptclass.cpp @@ -227,6 +227,7 @@ QDeclarativeContextScriptClass::queryProperty(QDeclarativeContextData *bindConte if (data) { lastData = data; lastContext = bindContext; + lastScopeObject = scopeObject; return QScriptClass::HandlesReadAccess; } } @@ -268,17 +269,12 @@ QDeclarativeContextScriptClass::property(Object *object, const Identifier &name) QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(engine); QScriptEngine *scriptEngine = QDeclarativeEnginePrivate::getScriptEngine(engine); - if (lastScopeObject) { - - return ep->objectClass->property(lastScopeObject, name); - - } else if (lastData) { + if (lastData) { if (lastData->type) { - return Value(scriptEngine, ep->typeNameClass->newObject(bindContext->contextObject, lastData->type)); + return Value(scriptEngine, ep->typeNameClass->newObject(lastScopeObject, lastData->type)); } else if (lastData->typeNamespace) { - return Value(scriptEngine, ep->typeNameClass->newObject(bindContext->contextObject, - lastData->typeNamespace)); + return Value(scriptEngine, ep->typeNameClass->newObject(lastScopeObject, lastData->typeNamespace)); } else { int index = lastData->importedScriptIndex; if (index < bindContext->importedScripts.count()) { @@ -288,6 +284,10 @@ QDeclarativeContextScriptClass::property(Object *object, const Identifier &name) } } + } else if (lastScopeObject) { + + return ep->objectClass->property(lastScopeObject, name); + } else if (lastPropertyIndex != -1) { QScriptValue rv; |