summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorWarwick Allison <warwick.allison@nokia.com>2010-01-08 04:33:25 (GMT)
committerWarwick Allison <warwick.allison@nokia.com>2010-01-08 04:33:25 (GMT)
commit36aef0b2c67a879a148b1f82d51e252968da0578 (patch)
tree92cef73e6bb3a597da108f006cf5cc30bebbd568 /src
parent9151c4838ac7428107246abb9c99f296ab395c3d (diff)
parent6db0dd65bdb9d999f5f5bbb54808517d3d212315 (diff)
downloadQt-36aef0b2c67a879a148b1f82d51e252968da0578.zip
Qt-36aef0b2c67a879a148b1f82d51e252968da0578.tar.gz
Qt-36aef0b2c67a879a148b1f82d51e252968da0578.tar.bz2
Merge branch 'kinetic-declarativeui' of git@scm.dev.nokia.troll.no:qt/kinetic into kinetic-declarativeui
Diffstat (limited to 'src')
-rw-r--r--src/declarative/qml/qmlengine.cpp15
-rw-r--r--src/declarative/qml/qmlengine_p.h3
-rw-r--r--src/declarative/qml/qmlexpression.cpp3
-rw-r--r--src/declarative/qml/qmlobjectscriptclass.cpp37
-rw-r--r--src/declarative/qml/qmlobjectscriptclass_p.h2
5 files changed, 48 insertions, 12 deletions
diff --git a/src/declarative/qml/qmlengine.cpp b/src/declarative/qml/qmlengine.cpp
index e7d0743..708cdd1 100644
--- a/src/declarative/qml/qmlengine.cpp
+++ b/src/declarative/qml/qmlengine.cpp
@@ -117,11 +117,11 @@ struct StaticQtMetaObject : public QObject
};
QmlEnginePrivate::QmlEnginePrivate(QmlEngine *e)
-: rootContext(0), currentExpression(0),
- isDebugging(false), contextClass(0), sharedContext(0), sharedScope(0), objectClass(0), valueTypeClass(0), globalClass(0),
- cleanup(0), erroredBindings(0),
- inProgressCreations(0), scriptEngine(this), workerScriptEngine(0), componentAttacheds(0),
- inBeginCreate(false), networkAccessManager(0), typeManager(e), uniqueId(1)
+: captureProperties(false), rootContext(0), currentExpression(0), isDebugging(false),
+ contextClass(0), sharedContext(0), sharedScope(0), objectClass(0), valueTypeClass(0),
+ globalClass(0), cleanup(0), erroredBindings(0), inProgressCreations(0),
+ scriptEngine(this), workerScriptEngine(0), componentAttacheds(0), inBeginCreate(false),
+ networkAccessManager(0), typeManager(e), uniqueId(1)
{
globalClass = new QmlGlobalScriptClass(&scriptEngine);
fileImportPath.append(QLibraryInfo::location(QLibraryInfo::DataPath)+QDir::separator()+QLatin1String("qml"));
@@ -138,10 +138,7 @@ QUrl QmlScriptEngine::resolvedUrl(QScriptContext *context, const QUrl& url)
}
QmlScriptEngine::QmlScriptEngine(QmlEnginePrivate *priv)
- : p(priv),
- sqlQueryClass(0),
- namedNodeMapClass(0),
- nodeListClass(0)
+: p(priv), sqlQueryClass(0), namedNodeMapClass(0), nodeListClass(0)
{
// Note that all documentation for stuff put on the global object goes in
// doc/src/declarative/globalobject.qdoc
diff --git a/src/declarative/qml/qmlengine_p.h b/src/declarative/qml/qmlengine_p.h
index 8f2f0fb..2f177a2 100644
--- a/src/declarative/qml/qmlengine_p.h
+++ b/src/declarative/qml/qmlengine_p.h
@@ -127,7 +127,7 @@ public:
QUrl baseUrl;
};
-class QmlEnginePrivate : public QObjectPrivate
+class Q_AUTOTEST_EXPORT QmlEnginePrivate : public QObjectPrivate
{
Q_DECLARE_PUBLIC(QmlEngine)
public:
@@ -144,6 +144,7 @@ public:
int coreIndex;
int notifyIndex;
};
+ bool captureProperties;
QPODVector<CapturedProperty> capturedProperties;
QmlContext *rootContext;
diff --git a/src/declarative/qml/qmlexpression.cpp b/src/declarative/qml/qmlexpression.cpp
index 652c5f8..1321601 100644
--- a/src/declarative/qml/qmlexpression.cpp
+++ b/src/declarative/qml/qmlexpression.cpp
@@ -436,10 +436,12 @@ QVariant QmlExpressionPrivate::value(QObject *secondaryScope, bool *isUndefined)
QmlEnginePrivate *ep = QmlEnginePrivate::get(q->engine());
QmlExpression *lastCurrentExpression = ep->currentExpression;
+ bool lastCaptureProperties = ep->captureProperties;
QPODVector<QmlEnginePrivate::CapturedProperty> lastCapturedProperties;
ep->capturedProperties.copyAndClear(lastCapturedProperties);
ep->currentExpression = q;
+ ep->captureProperties = data->trackChange;
// This object might be deleted during the eval
QmlExpressionData *localData = data;
@@ -452,6 +454,7 @@ QVariant QmlExpressionPrivate::value(QObject *secondaryScope, bool *isUndefined)
}
ep->currentExpression = lastCurrentExpression;
+ ep->captureProperties = lastCaptureProperties;
// Check if we were deleted
if (localData->q) {
diff --git a/src/declarative/qml/qmlobjectscriptclass.cpp b/src/declarative/qml/qmlobjectscriptclass.cpp
index 7f95b8f..73dfd75 100644
--- a/src/declarative/qml/qmlobjectscriptclass.cpp
+++ b/src/declarative/qml/qmlobjectscriptclass.cpp
@@ -220,7 +220,7 @@ QScriptValue QmlObjectScriptClass::property(QObject *obj, const Identifier &name
QScriptValue sobj = scriptEngine->newQObject(obj);
return sobj.property(toString(name));
} else {
- if (!(lastData->flags & QmlPropertyCache::Data::IsConstant)) {
+ if (enginePriv->captureProperties && !(lastData->flags & QmlPropertyCache::Data::IsConstant)) {
enginePriv->capturedProperties <<
QmlEnginePrivate::CapturedProperty(obj, lastData->coreIndex, lastData->notifyIndex);
}
@@ -247,6 +247,41 @@ QScriptValue QmlObjectScriptClass::property(QObject *obj, const Identifier &name
void *args[] = { &rv, 0 };
QMetaObject::metacall(obj, QMetaObject::ReadProperty, lastData->coreIndex, args);
return rv;
+ } else if (lastData->propType == QMetaType::QReal) {
+ qreal rv = 0;
+ void *args[] = { &rv, 0 };
+ QMetaObject::metacall(obj, QMetaObject::ReadProperty, lastData->coreIndex, args);
+ return QScriptValue(rv);
+ } else if (lastData->propType == QMetaType::Int) {
+ int rv = 0;
+ void *args[] = { &rv, 0 };
+ QMetaObject::metacall(obj, QMetaObject::ReadProperty, lastData->coreIndex, args);
+ return QScriptValue(rv);
+ } else if (lastData->propType == QMetaType::Bool) {
+ bool rv = false;
+ void *args[] = { &rv, 0 };
+ QMetaObject::metacall(obj, QMetaObject::ReadProperty, lastData->coreIndex, args);
+ return QScriptValue(rv);
+ } else if (lastData->propType == QMetaType::QString) {
+ QString rv;
+ void *args[] = { &rv, 0 };
+ QMetaObject::metacall(obj, QMetaObject::ReadProperty, lastData->coreIndex, args);
+ return QScriptValue(rv);
+ } else if (lastData->propType == QMetaType::UInt) {
+ uint rv = 0;
+ void *args[] = { &rv, 0 };
+ QMetaObject::metacall(obj, QMetaObject::ReadProperty, lastData->coreIndex, args);
+ return QScriptValue(rv);
+ } else if (lastData->propType == QMetaType::Float) {
+ float rv = 0;
+ void *args[] = { &rv, 0 };
+ QMetaObject::metacall(obj, QMetaObject::ReadProperty, lastData->coreIndex, args);
+ return QScriptValue(rv);
+ } else if (lastData->propType == QMetaType::Double) {
+ double rv = 0;
+ void *args[] = { &rv, 0 };
+ QMetaObject::metacall(obj, QMetaObject::ReadProperty, lastData->coreIndex, args);
+ return QScriptValue(rv);
} else {
QVariant var = obj->metaObject()->property(lastData->coreIndex).read(obj);
return enginePriv->scriptValueFromVariant(var);
diff --git a/src/declarative/qml/qmlobjectscriptclass_p.h b/src/declarative/qml/qmlobjectscriptclass_p.h
index 923be73..ca50688 100644
--- a/src/declarative/qml/qmlobjectscriptclass_p.h
+++ b/src/declarative/qml/qmlobjectscriptclass_p.h
@@ -66,7 +66,7 @@ class QmlEngine;
class QScriptContext;
class QScriptEngine;
class QmlContext;
-class QmlObjectScriptClass : public QScriptDeclarativeClass
+class Q_AUTOTEST_EXPORT QmlObjectScriptClass : public QScriptDeclarativeClass
{
public:
QmlObjectScriptClass(QmlEngine *);