if (d->extra.isAllocated() && d->extra->contents)
d->extra->contents->complete();
+
+ if (d->canvas && d->dirtyAttributes) {
+ d->addToDirtyList();
+ QQuickCanvasPrivate::get(d->canvas)->dirtyItem(this);
+ }
}
QQuickStateGroup *QQuickItemPrivate::_states()
if (!(dirtyAttributes & type) || (canvas && !prevDirtyItem)) {
dirtyAttributes |= type;
- if (canvas) {
+ if (canvas && componentComplete) {
addToDirtyList();
QQuickCanvasPrivate::get(canvas)->dirtyItem(q);
}
--- /dev/null
+import QtQuick 2.0
+
+ListView {
+ width: 320; height: 480
+ model: ListModel {}
+ cacheBuffer: 300
+ delegate: Rectangle {
+ objectName: "wrapper"
+ width: parent.width
+ height: parent.parent.height/12
+ color: index % 2 ? "red" : "blue"
+ }
+ Component.onCompleted: {
+ for (var i = 0; i < 100; ++i)
+ model.append({"foo":"bar"+i})
+ }
+}
void flickBeyondBounds();
void destroyItemOnCreation();
+ void parentBinding();
+
private:
template <class T> void items(const QUrl &source, bool forceLayout);
template <class T> void changed(const QUrl &source, bool forceLayout);
}
#endif
+ static void errorMsgHandler(QtMsgType, const char *)
+ {
+ ++m_errorCount;
+ }
+
QQuickView *m_view;
QString testForView;
+ static int m_errorCount;
};
+int tst_QQuickListView::m_errorCount = 0;
+
class TestObject : public QObject
{
Q_OBJECT
delete canvas;
}
+void tst_QQuickListView::parentBinding()
+{
+ QQuickView *canvas = createView();
+
+ m_errorCount = 0;
+ QtMsgHandler old = qInstallMsgHandler(errorMsgHandler);
+
+ canvas->setSource(testFileUrl("parentBinding.qml"));
+ canvas->show();
+ qApp->processEvents();
+
+ QQuickListView *listview = qobject_cast<QQuickListView*>(canvas->rootObject());
+ QVERIFY(listview != 0);
+
+ QQuickItem *contentItem = listview->contentItem();
+ QVERIFY(contentItem != 0);
+ QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false);
+
+ QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", 0);
+ QVERIFY(item);
+ QCOMPARE(item->width(), listview->width());
+ QCOMPARE(item->height(), listview->height()/12);
+
+ // there should be no transient binding error
+ QVERIFY(!m_errorCount);
+
+ qInstallMsgHandler(old);
+}
+
QTEST_MAIN(tst_QQuickListView)
#include "tst_qquicklistview.moc"