Section header is not made visible when changing currentIndex.
authorMartin Jones <martin.jones@nokia.com>
Fri, 3 Feb 2012 00:55:19 +0000 (10:55 +1000)
committerQt by Nokia <qt-info@nokia.com>
Tue, 7 Feb 2012 00:15:25 +0000 (01:15 +0100)
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 <bea.lam@nokia.com>

src/quick/items/qquickitemview.cpp
tests/auto/qtquick2/qquicklistview/tst_qquicklistview.cpp

index 513a600..f09be2b 100644 (file)
@@ -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();
index 9dd72ae..3915d13 100644 (file)
@@ -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");