diff --git a/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.cpp b/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.cpp index a99742dc7788111dfda68b0a561118e4152235c2..befbc524eeafc75916e39bb65585bdc90ae103fb 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 9a877f2322bcc24190301e556a4fafa286cf7fd6..795c51718960d3b443bff24c3f0c47141c7e7a76 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 4dc99587e721ab16fc22d51eae533876fbd12125..446be865f6c287dc2b194d1ffdf1de515bfcf506 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()); } } }