From 15fd9d0c230680255b523b0409c0eb946d7a785f Mon Sep 17 00:00:00 2001 From: Kent Hansen Date: Mon, 4 Jun 2012 16:10:34 +0200 Subject: [PATCH] Pass the right signal index in visualadaptormodel proxy meta-object For QMetaObject::activate(), the index must be relative to the class's own signals (excluding non-signal methods). For QMetaObjectBuilder, the notifier index must be relative to the class's own methods. Change-Id: I22f55d1fc55d56c997135dc78f51b710b37bb01a Reviewed-by: Andrew den Exter --- src/quick/items/qquickvisualadaptormodel.cpp | 4 ++-- .../qquickvisualdatamodel/data/objectlist.qml | 2 +- .../tst_qquickvisualdatamodel.cpp | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/quick/items/qquickvisualadaptormodel.cpp b/src/quick/items/qquickvisualadaptormodel.cpp index 4151c36..b15513e 100644 --- a/src/quick/items/qquickvisualadaptormodel.cpp +++ b/src/quick/items/qquickvisualadaptormodel.cpp @@ -882,7 +882,7 @@ public: QMetaObject::metacall(m_data->object, call, id - m_type->propertyOffset + objectPropertyOffset, arguments); return -1; } else if (id >= m_type->signalOffset && call == QMetaObject::InvokeMetaMethod) { - QMetaObject::activate(m_data, this, id, 0); + QMetaObject::activate(m_data, this, id - m_type->signalOffset, 0); return -1; } else { return m_data->qt_metacall(call, id, arguments); @@ -910,7 +910,7 @@ public: } const int previousMethodCount = methodCount(); - int notifierId = previousMethodCount; + int notifierId = previousMethodCount - methodOffset(); for (int propertyId = previousPropertyCount; propertyId < metaObject->propertyCount() - objectPropertyOffset; ++propertyId) { QMetaProperty property = metaObject->property(propertyId + objectPropertyOffset); QMetaPropertyBuilder propertyBuilder; diff --git a/tests/auto/quick/qquickvisualdatamodel/data/objectlist.qml b/tests/auto/quick/qquickvisualdatamodel/data/objectlist.qml index b3952a8..99151aa 100644 --- a/tests/auto/quick/qquickvisualdatamodel/data/objectlist.qml +++ b/tests/auto/quick/qquickvisualdatamodel/data/objectlist.qml @@ -10,7 +10,7 @@ ListView { height: 25 width: 100 color: model.modelData.color - Text { objectName: "name"; text: name; function getText() { return name } } + Text { objectName: "name"; text: name; property string modelName: model.name; function getText() { return name } } Text { objectName: "section"; text: parent.ListView.section } } } diff --git a/tests/auto/quick/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp b/tests/auto/quick/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp index 2d6cfa0..5da7dc7 100644 --- a/tests/auto/quick/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp +++ b/tests/auto/quick/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp @@ -525,12 +525,14 @@ void tst_qquickvisualdatamodel::objectListModel() QQuickText *name = findItem(contentItem, "name", 0); QCOMPARE(name->text(), QString("Item 1")); + QCOMPARE(name->property("modelName").toString(), QString("Item 1")); QQuickText *section = findItem(contentItem, "section", 0); QCOMPARE(section->text(), QString("Item 1")); dataList[0]->setProperty("name", QLatin1String("Changed")); QCOMPARE(name->text(), QString("Changed")); + QCOMPARE(name->property("modelName").toString(), QString("Changed")); } void tst_qquickvisualdatamodel::singleRole() -- 1.7.2.5