From 3bdabea8096b5ea20b7097fc4c480caeb5b7bb9e Mon Sep 17 00:00:00 2001
From: Kai Koehne <kai.koehne@nokia.com>
Date: Thu, 8 Apr 2010 13:56:15 +0200
Subject: [PATCH] Cache dynamic properties.

(Patch done by marco)
---
 .../core/instances/nodeinstancemetaobject.cpp          | 10 ++++++----
 .../core/instances/nodeinstancemetaobject.h            |  4 ++--
 .../qmldesigner/core/instances/objectnodeinstance.cpp  |  4 ++--
 3 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.cpp b/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.cpp
index a99742dc778..befbc524eea 100644
--- a/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.cpp
+++ b/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.cpp
@@ -8,18 +8,20 @@
 namespace QmlDesigner {
 namespace Internal {
 
-NodeInstanceMetaObject::NodeInstanceMetaObject(const ObjectNodeInstance::Pointer &nodeInstance)
-    : QDeclarativeOpenMetaObject(nodeInstance->object()),
+NodeInstanceMetaObject::NodeInstanceMetaObject(const ObjectNodeInstance::Pointer &nodeInstance, QDeclarativeEngine *engine)
+    : QDeclarativeOpenMetaObject(nodeInstance->object(), new QDeclarativeOpenMetaObjectType(nodeInstance->object()->metaObject(), engine)),
     m_nodeInstance(nodeInstance),
     m_context(nodeInstance->modelNode().isRootNode() ? nodeInstance->context() : 0)
 {
+    setCached(true);
 }
 
-NodeInstanceMetaObject::NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const QString &prefix)
-    : QDeclarativeOpenMetaObject(object),
+NodeInstanceMetaObject::NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const QString &prefix, QDeclarativeEngine *engine)
+    : QDeclarativeOpenMetaObject(object, new QDeclarativeOpenMetaObjectType(object->metaObject(), engine)),
     m_nodeInstance(nodeInstance),
     m_prefix(prefix)
 {
+    setCached(true);
 }
 
 void NodeInstanceMetaObject::createNewProperty(const QString &name)
diff --git a/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.h b/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.h
index 9a877f2322b..795c5171896 100644
--- a/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.h
+++ b/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.h
@@ -14,8 +14,8 @@ typedef QWeakPointer<ObjectNodeInstance> ObjectNodeInstanceWeakPointer;
 class NodeInstanceMetaObject : public QDeclarativeOpenMetaObject
 {
 public:
-    NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance);
-    NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const QString &prefix);
+    NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QDeclarativeEngine *engine);
+    NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const QString &prefix, QDeclarativeEngine *engine);
     void createNewProperty(const QString &name);
 
 protected:
diff --git a/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp b/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp
index 4dc99587e72..446be865f6c 100644
--- a/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp
+++ b/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp
@@ -176,12 +176,12 @@ void ObjectNodeInstance::initializePropertyWatcher(const ObjectNodeInstance::Poi
 {
     if (!objectNodeInstance->modelNode().metaInfo().isComponent()) { // TODO: this is a nasty workaround which needs to be removed
         const QMetaObject *metaObject = objectNodeInstance->object()->metaObject();
-        m_metaObject = new NodeInstanceMetaObject(objectNodeInstance);
+        m_metaObject = new NodeInstanceMetaObject(objectNodeInstance, nodeInstanceView()->engine());
         for(int propertyIndex = QObject::staticMetaObject.propertyCount(); propertyIndex < metaObject->propertyCount(); propertyIndex++) {
             if (QDeclarativeMetaType::isQObject(metaObject->property(propertyIndex).userType())) {
                 QObject *propertyObject = QDeclarativeMetaType::toQObject(metaObject->property(propertyIndex).read(objectNodeInstance->object()));
                 if (propertyObject && hasPropertiesWitoutNotifications(propertyObject->metaObject())) {
-                    new NodeInstanceMetaObject(objectNodeInstance, propertyObject, metaObject->property(propertyIndex).name());
+                    new NodeInstanceMetaObject(objectNodeInstance, propertyObject, metaObject->property(propertyIndex).name(), nodeInstanceView()->engine());
                 }
             }
         }
-- 
GitLab