summaryrefslogtreecommitdiffstats
path: root/src/declarative/qml/qmlcontext.cpp
diff options
context:
space:
mode:
authorMartin Jones <martin.jones@nokia.com>2009-12-16 05:09:20 (GMT)
committerMartin Jones <martin.jones@nokia.com>2009-12-16 05:09:20 (GMT)
commitb9d7f819b7bf9f7c39735377ae2e3e4d4afa1cf7 (patch)
treee02c4575aa1a1e865dffbe6095449da50f7cb5b0 /src/declarative/qml/qmlcontext.cpp
parent91fe11aeecc951c0713f7275726081017c385495 (diff)
downloadQt-b9d7f819b7bf9f7c39735377ae2e3e4d4afa1cf7.zip
Qt-b9d7f819b7bf9f7c39735377ae2e3e4d4afa1cf7.tar.gz
Qt-b9d7f819b7bf9f7c39735377ae2e3e4d4afa1cf7.tar.bz2
Make QListModelInterface API more sensible for our use case.
Diffstat (limited to 'src/declarative/qml/qmlcontext.cpp')
-rw-r--r--src/declarative/qml/qmlcontext.cpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/declarative/qml/qmlcontext.cpp b/src/declarative/qml/qmlcontext.cpp
index 445bf03..49bb59c 100644
--- a/src/declarative/qml/qmlcontext.cpp
+++ b/src/declarative/qml/qmlcontext.cpp
@@ -453,12 +453,20 @@ QVariant QmlContext::contextProperty(const QString &name) const
if (idx == -1) {
QByteArray utf8Name = name.toUtf8();
for (int ii = d->defaultObjects.count() - 1; ii >= 0; --ii) {
- value = d->defaultObjects.at(ii)->property(utf8Name);
- if (!value.isValid() && parentContext())
- value = parentContext()->contextProperty(name);
+ QObject *obj = d->defaultObjects.at(ii);
+ QmlDeclarativeData *data = QmlDeclarativeData::get(obj);
+ if (data && data->propertyCache) {
+ QmlPropertyCache::Data *property = data->propertyCache->property(name);
+ if (property)
+ value = obj->metaObject()->property(property->coreIndex).read(obj);
+ } else {
+ value = obj->property(utf8Name);
+ }
if (value.isValid())
break;
}
+ if (!value.isValid() && parentContext())
+ value = parentContext()->contextProperty(name);
} else {
value = d->propertyValues[idx];
}