aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/qml/types/qqmlbind.cpp4
-rw-r--r--tests/auto/qml/qqmlbinding/data/disabledReadonly.qml14
-rw-r--r--tests/auto/qml/qqmlbinding/data/disabledUnknown.qml12
-rw-r--r--tests/auto/qml/qqmlbinding/tst_qqmlbinding.cpp28
4 files changed, 57 insertions, 1 deletions
diff --git a/src/qml/types/qqmlbind.cpp b/src/qml/types/qqmlbind.cpp
index 45b7edd316..2150f67366 100644
--- a/src/qml/types/qqmlbind.cpp
+++ b/src/qml/types/qqmlbind.cpp
@@ -69,7 +69,7 @@ public:
void QQmlBindPrivate::validate(QObject *binding) const
{
- if (!obj)
+ if (!obj || (when.isValid() && !when))
return;
if (!prop.isValid()) {
@@ -179,6 +179,8 @@ void QQmlBind::setWhen(bool v)
return;
d->when = v;
+ if (v && d->componentComplete)
+ d->validate(this);
eval();
}
diff --git a/tests/auto/qml/qqmlbinding/data/disabledReadonly.qml b/tests/auto/qml/qqmlbinding/data/disabledReadonly.qml
new file mode 100644
index 0000000000..2d1715364c
--- /dev/null
+++ b/tests/auto/qml/qqmlbinding/data/disabledReadonly.qml
@@ -0,0 +1,14 @@
+import QtQuick 2.0
+
+Item {
+ id: root
+
+ readonly property string name: "John"
+
+ Binding {
+ target: root
+ property: "name"
+ value: "Doe"
+ when: false
+ }
+}
diff --git a/tests/auto/qml/qqmlbinding/data/disabledUnknown.qml b/tests/auto/qml/qqmlbinding/data/disabledUnknown.qml
new file mode 100644
index 0000000000..08e1cff5d1
--- /dev/null
+++ b/tests/auto/qml/qqmlbinding/data/disabledUnknown.qml
@@ -0,0 +1,12 @@
+import QtQuick 2.0
+
+Item {
+ id: root
+
+ Binding {
+ target: root
+ property: "unknown"
+ value: 42
+ when: false
+ }
+}
diff --git a/tests/auto/qml/qqmlbinding/tst_qqmlbinding.cpp b/tests/auto/qml/qqmlbinding/tst_qqmlbinding.cpp
index 3e49f3b3c4..9747fed420 100644
--- a/tests/auto/qml/qqmlbinding/tst_qqmlbinding.cpp
+++ b/tests/auto/qml/qqmlbinding/tst_qqmlbinding.cpp
@@ -52,6 +52,8 @@ private slots:
void deletedObject();
void warningOnUnknownProperty();
void warningOnReadOnlyProperty();
+ void disabledOnUnknownProperty();
+ void disabledOnReadonlyProperty();
private:
QQmlEngine engine;
@@ -258,6 +260,32 @@ void tst_qqmlbinding::warningOnReadOnlyProperty()
QCOMPARE(messageHandler.messages().first(), expectedMessage);
}
+void tst_qqmlbinding::disabledOnUnknownProperty()
+{
+ QQmlTestMessageHandler messageHandler;
+
+ QQmlEngine engine;
+ QQmlComponent c(&engine, testFileUrl("disabledUnknown.qml"));
+ QQuickItem *item = qobject_cast<QQuickItem*>(c.create());
+ QVERIFY(item);
+ delete item;
+
+ QCOMPARE(messageHandler.messages().count(), 0);
+}
+
+void tst_qqmlbinding::disabledOnReadonlyProperty()
+{
+ QQmlTestMessageHandler messageHandler;
+
+ QQmlEngine engine;
+ QQmlComponent c(&engine, testFileUrl("disabledReadonly.qml"));
+ QQuickItem *item = qobject_cast<QQuickItem*>(c.create());
+ QVERIFY(item);
+ delete item;
+
+ QCOMPARE(messageHandler.messages().count(), 0);
+}
+
QTEST_MAIN(tst_qqmlbinding)
#include "tst_qqmlbinding.moc"