From: Martin Jones Date: Wed, 30 May 2012 02:58:04 +0000 (+1000) Subject: Clearing a view didn't reset content size. X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=47204d2cc9d2bdb85aab869fcc5307d7c09df12c;p=konrad%2Fqtdeclarative.git Clearing a view didn't reset content size. Ensure that a valid contentHeight/contentWidth is set regardless of whether there is a valid model. Change-Id: I546683c7571a1379e3ca2ef285435ad48319e8e4 Reviewed-by: Bea Lam --- diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp index f7b28e1..1774931 100644 --- a/src/quick/items/qquickitemview.cpp +++ b/src/quick/items/qquickitemview.cpp @@ -1714,13 +1714,12 @@ void QQuickItemViewPrivate::regenerate() void QQuickItemViewPrivate::updateViewport() { Q_Q(QQuickItemView); - if (isValid()) { - qreal extra = headerSize() + footerSize(); - if (layoutOrientation() == Qt::Vertical) - q->setContentHeight(endPosition() - startPosition() + extra); - else - q->setContentWidth(endPosition() - startPosition() + extra); - } + qreal extra = headerSize() + footerSize(); + qreal contentSize = isValid() ? (endPosition() - startPosition()) : 0.0; + if (layoutOrientation() == Qt::Vertical) + q->setContentHeight(contentSize + extra); + else + q->setContentWidth(contentSize + extra); } void QQuickItemViewPrivate::layout() diff --git a/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp b/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp index 235c29f..9a84200 100644 --- a/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp +++ b/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp @@ -1238,6 +1238,7 @@ void tst_QQuickGridView::clear() QVERIFY(gridview->currentItem() == 0); QVERIFY(gridview->contentY() == 0); QVERIFY(gridview->currentIndex() == -1); + QCOMPARE(gridview->contentHeight(), 0.0); // confirm sanity when adding an item to cleared list model.addItem("New", "1"); @@ -3146,6 +3147,10 @@ void tst_QQuickGridView::footer() // remove all items model.clear(); + if (flow == QQuickGridView::FlowLeftToRight) + QTRY_COMPARE(gridview->contentHeight(), footer->height()); + else + QTRY_COMPARE(gridview->contentWidth(), footer->width()); QPointF posWhenNoItems(0, 0); if (layoutDirection == Qt::RightToLeft) @@ -3360,6 +3365,10 @@ void tst_QQuickGridView::header() model.clear(); QTRY_COMPARE(QQuickItemPrivate::get(gridview)->polishScheduled, false); QCOMPARE(header->pos(), initialHeaderPos); // header should stay where it is + if (flow == QQuickGridView::FlowLeftToRight) + QCOMPARE(gridview->contentHeight(), header->height()); + else + QCOMPARE(gridview->contentWidth(), header->width()); for (int i = 0; i < 30; i++) model.addItem("Item" + QString::number(i), ""); diff --git a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp index 45337e2..4696e44 100644 --- a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp +++ b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp @@ -1210,6 +1210,8 @@ void tst_QQuickListView::clear(const QUrl &source, QQuickItemView::VerticalLayou QTRY_COMPARE(listview->contentY(), -listview->height()); QVERIFY(listview->currentIndex() == -1); + QCOMPARE(listview->contentHeight(), 0.0); + // confirm sanity when adding an item to cleared list model.addItem("New", "1"); QTRY_VERIFY(listview->count() == 1); @@ -3343,6 +3345,10 @@ void tst_QQuickListView::header() model.clear(); QTRY_COMPARE(listview->count(), model.count()); QCOMPARE(header->pos(), initialHeaderPos); // header should stay where it is + if (orientation == QQuickListView::Vertical) + QCOMPARE(listview->contentHeight(), header->height()); + else + QCOMPARE(listview->contentWidth(), header->width()); for (int i = 0; i < 30; i++) model.addItem("Item" + QString::number(i), ""); @@ -3559,6 +3565,10 @@ void tst_QQuickListView::footer() // remove all items model.clear(); + if (orientation == QQuickListView::Vertical) + QTRY_COMPARE(listview->contentHeight(), footer->height()); + else + QTRY_COMPARE(listview->contentWidth(), footer->width()); QPointF posWhenNoItems(0, 0); if (orientation == QQuickListView::Horizontal && layoutDirection == Qt::RightToLeft)