From a4895dc77c556e9ab7af663057025857ae0d885b Mon Sep 17 00:00:00 2001
From: Marco Bubke <marco.bubke@nokia.com>
Date: Wed, 7 Apr 2010 14:37:14 +0200
Subject: [PATCH] Check if the property is valid

If the property is not valid(not exists) simply return.
---
 .../core/instances/objectnodeinstance.cpp     | 22 +++++++++++++++----
 .../instances/qmlgraphicsitemnodeinstance.cpp |  3 +++
 2 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp b/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp
index 8d9c12e2911..db259b6ec4f 100644
--- a/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp
+++ b/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp
@@ -358,6 +358,9 @@ void ObjectNodeInstance::removeFromOldProperty(QObject *object, QObject *oldPare
 {
     QDeclarativeProperty metaProperty(oldParent, oldParentProperty, context());
 
+    if (!metaProperty.isValid())
+        return;
+
     if (isList(metaProperty)) {
         removeObjectFromList(metaProperty, object, nodeInstanceView()->engine());
     } else if (isObject(metaProperty)) {
@@ -415,6 +418,9 @@ void ObjectNodeInstance::setPropertyVariant(const QString &name, const QVariant
 {
     QDeclarativeProperty property(object(), name, context());
 
+    if (!property.isValid())
+        return;
+
     QVariant oldValue = property.read();
     if (oldValue.type() == QVariant::Url) {
         QUrl url = oldValue.toUrl();
@@ -439,11 +445,13 @@ void ObjectNodeInstance::setPropertyVariant(const QString &name, const QVariant
 
 void ObjectNodeInstance::setPropertyBinding(const QString &name, const QString &expression)
 {
-    QDeclarativeContext *QDeclarativeContext = QDeclarativeEngine::contextForObject(object());
-
     QDeclarativeProperty metaProperty(object(), name, context());
-    if (metaProperty.isValid() && metaProperty.isProperty()) {
-        QDeclarativeBinding *binding = new QDeclarativeBinding(expression, object(), QDeclarativeContext);
+
+    if (!metaProperty.isValid())
+        return;
+
+    if (metaProperty.isProperty()) {
+        QDeclarativeBinding *binding = new QDeclarativeBinding(expression, object(), context());
         binding->setTarget(metaProperty);
         binding->setNotifyOnValueChanged(true);
         QDeclarativeAbstractBinding *oldBinding = QDeclarativePropertyPrivate::setBinding(metaProperty, binding);
@@ -499,6 +507,9 @@ void ObjectNodeInstance::refreshProperty(const QString &name)
 {
     QDeclarativeProperty property(object(), name, context());
 
+    if (!property.isValid())
+        return;
+
     QVariant oldValue(property.read());
 
     if (property.isResettable())
@@ -521,6 +532,9 @@ void ObjectNodeInstance::resetProperty(QObject *object, const QString &propertyN
 
     QDeclarativeProperty property(object, propertyName, context());
 
+    if (!property.isValid())
+        return;
+
     QVariant oldValue = property.read();
     if (oldValue.type() == QVariant::Url) {
         QUrl url = oldValue.toUrl();
diff --git a/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.cpp b/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.cpp
index eb9ad087de2..84c9464ef76 100644
--- a/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.cpp
+++ b/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.cpp
@@ -509,6 +509,9 @@ QPair<QString, NodeInstance> QmlGraphicsItemNodeInstance::anchor(const QString &
         targetObject = qmlGraphicsItem()->anchors()->centerIn();
     } else {
         QDeclarativeProperty metaProperty(object(), name, context());
+        if (!metaProperty.isValid())
+            return GraphicsObjectNodeInstance::anchor(name);
+
         QDeclarativeAnchorLine anchorLine = metaProperty.read().value<QDeclarativeAnchorLine>();
         if (anchorLine.anchorLine != QDeclarativeAnchorLine::Invalid) {
             targetObject = anchorLine.item;
-- 
GitLab