Fix setContextObject to re-evaluate bindings
authorAlex Montgomery <apmontgomery@gmail.com>
Fri, 15 Aug 2014 16:41:56 +0000 (09:41 -0700)
committerAlex Montgomery <apmontgo@codereview.qt-project.org>
Fri, 15 Aug 2014 16:48:33 +0000 (18:48 +0200)
Fix QQmlContext::setContextObject to reevaluate bindings as the
documentation says that it should.

Task-number: QTBUG-40798
Change-Id: Ifbd97c7a07a5432f4948937da863370b05705206
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
src/qml/qml/qqmlcontext.cpp
tests/auto/qml/qqmlcontext/tst_qqmlcontext.cpp

index 7b1ba46..0a550f5 100644 (file)
@@ -280,6 +280,7 @@ void QQmlContext::setContextObject(QObject *object)
     }
 
     data->contextObject = object;
+    data->refreshExpressions();
 }
 
 /*!
index 1478871..e9c031a 100644 (file)
@@ -401,6 +401,18 @@ void tst_qqmlcontext::setContextObject()
 
         delete obj;
     }
+
+    // Change of context object
+    ctxt.setContextProperty("c", QVariant(30));
+    TestObject to2;
+    to2.setA(10);
+    to2.setB(20);
+    to2.setC(40);
+    ctxt.setContextObject(&to2);
+
+    TEST_CONTEXT_PROPERTY(&ctxt, a, QVariant(10));
+    TEST_CONTEXT_PROPERTY(&ctxt, b, QVariant(20));
+    TEST_CONTEXT_PROPERTY(&ctxt, c, QVariant(30));
 }
 
 void tst_qqmlcontext::destruction()