From 201edf3a34c7a69f5ab905c286ab12b975cdc3da Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Fri, 3 Feb 2012 10:55:19 +1000 Subject: [PATCH] Section header is not made visible when changing currentIndex. Make section header visible when setting currentIndex to an item on a section boundary. Could also affect initial position if view size started at 0. Change-Id: Ie65f91826311d34a290d369d8956f1c88f7efb70 Reviewed-by: Bea Lam --- src/quick/items/qquickitemview.cpp | 8 +++++--- .../qtquick2/qquicklistview/tst_qquicklistview.cpp | 7 +++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp index 513a600..f09be2b 100644 --- a/src/quick/items/qquickitemview.cpp +++ b/src/quick/items/qquickitemview.cpp @@ -817,9 +817,6 @@ void QQuickItemView::trackedPositionChanged() if (d->moveReason == QQuickItemViewPrivate::SetIndex) { qreal trackedPos = d->trackedItem->position(); qreal trackedSize = d->trackedItem->size(); - if (d->trackedItem != d->currentItem) { - trackedSize += d->currentItem->sectionSize(); - } qreal viewPos = d->isContentFlowReversed() ? -d->position()-d->size() : d->position(); qreal pos = viewPos; if (d->haveHighlightRange) { @@ -834,6 +831,11 @@ void QQuickItemView::trackedPositionChanged() pos = d->startPosition(); } } else { + if (d->trackedItem != d->currentItem) { + // also make section header visible + trackedPos -= d->currentItem->sectionSize(); + trackedSize += d->currentItem->sectionSize(); + } qreal trackedEndPos = d->trackedItem->endPosition(); qreal toItemPos = d->currentItem->position(); qreal toItemEndPos = d->currentItem->endPosition(); diff --git a/tests/auto/qtquick2/qquicklistview/tst_qquicklistview.cpp b/tests/auto/qtquick2/qquicklistview/tst_qquicklistview.cpp index 9dd72ae..3915d13 100644 --- a/tests/auto/qtquick2/qquicklistview/tst_qquicklistview.cpp +++ b/tests/auto/qtquick2/qquicklistview/tst_qquicklistview.cpp @@ -2118,6 +2118,13 @@ void tst_QQuickListView::sectionsDelegate() QTRY_COMPARE(item->y(), qreal(i*20*6)); } + // ensure section header is maintained in view + listview->setCurrentIndex(20); + QTRY_VERIFY(listview->contentY() >= 200.0); + listview->setCurrentIndex(0); + QTRY_COMPARE(listview->contentY(), 0.0); + + // change section model.modifyItem(0, "One", "aaa"); model.modifyItem(1, "Two", "aaa"); model.modifyItem(2, "Three", "aaa"); -- 1.7.2.5