Pass the right signal index in visualadaptormodel proxy meta-object
authorKent Hansen <kent.hansen@nokia.com>
Mon, 4 Jun 2012 14:10:34 +0000 (16:10 +0200)
committerQt by Nokia <qt-info@nokia.com>
Fri, 22 Jun 2012 08:04:44 +0000 (10:04 +0200)
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 <andrew.den-exter@nokia.com>
src/quick/items/qquickvisualadaptormodel.cpp
tests/auto/quick/qquickvisualdatamodel/data/objectlist.qml
tests/auto/quick/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp

index 4151c36..b15513e 100644 (file)
@@ -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;
index b3952a8..99151aa 100644 (file)
@@ -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 }
         }
     }
index 2d6cfa0..5da7dc7 100644 (file)
@@ -525,12 +525,14 @@ void tst_qquickvisualdatamodel::objectListModel()
 
     QQuickText *name = findItem<QQuickText>(contentItem, "name", 0);
     QCOMPARE(name->text(), QString("Item 1"));
+    QCOMPARE(name->property("modelName").toString(), QString("Item 1"));
 
     QQuickText *section = findItem<QQuickText>(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()