diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2014-03-25 16:24:03 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-03-27 20:39:59 +0100 |
commit | cfd5a1fb4ed1c51c3dadab0c63820c625992069d (patch) | |
tree | fbd56339d1cb510c5f849e862ad222603ad94eab /tests/auto/qml/qqmllanguage/testtypes.h | |
parent | 57f4d8b490b994b124278b2c7c656319dfe0382f (diff) |
Fix instantiation of QML list models with custom object properties
When doing something like
property Item blah: Item { ... }
in a list model, we would erroneously pass "blah" to the custom parser of the
list model, which is wrong as the binding to blah is on an existing property
(not custom). For regular properties there's a code path in place to avoid
passing this to the custom parser, but for sub-object bindings we'd
unconditionally register it with the custom parser. This patch corrects that
and also adds a unit test to verify that we don't pass any bindings to existing
properties to the custom parser.
Task-number: QTBUG-37795
Change-Id: I1a3091fb5fad4be08b577cf74a85f24c3ab62ef4
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'tests/auto/qml/qqmllanguage/testtypes.h')
-rw-r--r-- | tests/auto/qml/qqmllanguage/testtypes.h | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmllanguage/testtypes.h b/tests/auto/qml/qqmllanguage/testtypes.h index 6ed363e363..a8605da651 100644 --- a/tests/auto/qml/qqmllanguage/testtypes.h +++ b/tests/auto/qml/qqmllanguage/testtypes.h @@ -1104,6 +1104,33 @@ class CustomBindingParser : public QQmlCustomParser virtual void setCustomData(QObject *object, const QByteArray &data); }; +class SimpleObjectWithCustomParser : public QObject +{ + Q_OBJECT + Q_PROPERTY(int intProperty READ intProperty WRITE setIntProperty) +public: + SimpleObjectWithCustomParser() + : m_intProperty(0) + , m_customBindingsCount(0) + {} + + int intProperty() const { return m_intProperty; } + void setIntProperty(int value) { m_intProperty = value; } + + void setCustomBindingsCount(int count) { m_customBindingsCount = count; } + int customBindingsCount() const { return m_customBindingsCount; } + +private: + int m_intProperty; + int m_customBindingsCount; +}; + +class SimpleObjectCustomParser : public QQmlCustomParser +{ + virtual QByteArray compile(const QV4::CompiledData::QmlUnit *, int, const QList<const QV4::CompiledData::Binding *> &bindings); + virtual void setCustomData(QObject *object, const QByteArray &data); +}; + class RootObjectInCreationTester : public QObject { Q_OBJECT |