From da0441aa30e1e10c1e0ac9a8cd305c1b6e63c111 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Thu, 28 Jul 2011 15:06:02 +1000 Subject: ListView doesn't show new 1st item currentItem is removed. If the new 1st item becomes the currentItem after removal it was positioned incorrectly because the currentItem is positioned based on visibleIndex, which was updated after the currentItem was updated. Move visibleIndex update before currentItem update. Change-Id: Iaf92a41eefe7bce093e3000d17f5496dba144bcd Fixes: QTBUG-20575 Reviewed-on: http://codereview.qt.nokia.com/2316 Reviewed-by: Qt Sanity Bot Reviewed-by: Bea Lam --- src/declarative/items/qsggridview.cpp | 18 +++++++++--------- src/declarative/items/qsglistview.cpp | 20 ++++++++++---------- 2 files changed, 19 insertions(+), 19 deletions(-) (limited to 'src/declarative/items') diff --git a/src/declarative/items/qsggridview.cpp b/src/declarative/items/qsggridview.cpp index 214481a288..7b0e4f3e9a 100644 --- a/src/declarative/items/qsggridview.cpp +++ b/src/declarative/items/qsggridview.cpp @@ -1445,6 +1445,15 @@ void QSGGridView::itemsRemoved(int modelIndex, int count) } } + // update visibleIndex + d->visibleIndex = 0; + for (it = d->visibleItems.begin(); it != d->visibleItems.end(); ++it) { + if ((*it)->index != -1) { + d->visibleIndex = (*it)->index; + break; + } + } + // fix current if (d->currentIndex >= modelIndex + count) { d->currentIndex -= count; @@ -1462,15 +1471,6 @@ void QSGGridView::itemsRemoved(int modelIndex, int count) emit currentIndexChanged(); } - // update visibleIndex - d->visibleIndex = 0; - for (it = d->visibleItems.begin(); it != d->visibleItems.end(); ++it) { - if ((*it)->index != -1) { - d->visibleIndex = (*it)->index; - break; - } - } - if (removedVisible && d->visibleItems.isEmpty()) { d->timeline.clear(); if (d->itemCount == 0) { diff --git a/src/declarative/items/qsglistview.cpp b/src/declarative/items/qsglistview.cpp index 37b027cd36..641dd35104 100644 --- a/src/declarative/items/qsglistview.cpp +++ b/src/declarative/items/qsglistview.cpp @@ -1751,6 +1751,16 @@ void QSGListView::itemsRemoved(int modelIndex, int count) if (firstVisible && d->visibleItems.first() != firstVisible) static_cast(d->visibleItems.first())->setPosition(d->visibleItems.first()->position() + preRemovedSize); + // update visibleIndex + bool haveVisibleIndex = false; + for (it = d->visibleItems.begin(); it != d->visibleItems.end(); ++it) { + if ((*it)->index != -1) { + d->visibleIndex = (*it)->index; + haveVisibleIndex = true; + break; + } + } + // fix current if (d->currentIndex >= modelIndex + count) { d->currentIndex -= count; @@ -1771,16 +1781,6 @@ void QSGListView::itemsRemoved(int modelIndex, int count) emit currentIndexChanged(); } - // update visibleIndex - bool haveVisibleIndex = false; - for (it = d->visibleItems.begin(); it != d->visibleItems.end(); ++it) { - if ((*it)->index != -1) { - d->visibleIndex = (*it)->index; - haveVisibleIndex = true; - break; - } - } - if (!haveVisibleIndex) { d->timeline.clear(); if (removedVisible && d->itemCount == 0) { -- cgit v1.2.3