diff options
-rw-r--r-- | src/declarative/items/qsggridview.cpp | 18 | ||||
-rw-r--r-- | src/declarative/items/qsglistview.cpp | 20 | ||||
-rw-r--r-- | src/qtquick1/graphicsitems/qdeclarativegridview.cpp | 18 | ||||
-rw-r--r-- | src/qtquick1/graphicsitems/qdeclarativelistview.cpp | 20 | ||||
-rw-r--r-- | tests/auto/declarative/qsglistview/tst_qsglistview.cpp | 9 | ||||
-rw-r--r-- | tests/auto/qtquick1/qdeclarativelistview/tst_qdeclarativelistview.cpp | 9 |
6 files changed, 54 insertions, 40 deletions
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<FxListItemSG*>(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) { diff --git a/src/qtquick1/graphicsitems/qdeclarativegridview.cpp b/src/qtquick1/graphicsitems/qdeclarativegridview.cpp index f81256c2ba..63b907b022 100644 --- a/src/qtquick1/graphicsitems/qdeclarativegridview.cpp +++ b/src/qtquick1/graphicsitems/qdeclarativegridview.cpp @@ -2919,6 +2919,15 @@ void QDeclarative1GridView::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; @@ -2936,15 +2945,6 @@ void QDeclarative1GridView::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/qtquick1/graphicsitems/qdeclarativelistview.cpp b/src/qtquick1/graphicsitems/qdeclarativelistview.cpp index 4c01514801..c58543c735 100644 --- a/src/qtquick1/graphicsitems/qdeclarativelistview.cpp +++ b/src/qtquick1/graphicsitems/qdeclarativelistview.cpp @@ -3383,6 +3383,16 @@ void QDeclarative1ListView::itemsRemoved(int modelIndex, int count) if (firstVisible && d->visibleItems.first() != firstVisible) 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; @@ -3401,16 +3411,6 @@ void QDeclarative1ListView::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) { diff --git a/tests/auto/declarative/qsglistview/tst_qsglistview.cpp b/tests/auto/declarative/qsglistview/tst_qsglistview.cpp index c7a68e55cc..43efea268b 100644 --- a/tests/auto/declarative/qsglistview/tst_qsglistview.cpp +++ b/tests/auto/declarative/qsglistview/tst_qsglistview.cpp @@ -788,9 +788,16 @@ void tst_QSGListView::removed(bool animated) QCOMPARE(name->text(), QString("New")); // Add some more items so that we don't run out - for (int i = 50; i < 100; i++) + model.clear(); + for (int i = 0; i < 50; i++) model.addItem("Item" + QString::number(i), ""); + // QTBUG-QTBUG-20575 + listview->setCurrentIndex(0); + listview->setContentY(30); + model.removeItem(0); + QTRY_VERIFY(name = findItem<QSGText>(contentItem, "textName", 0)); + // QTBUG-19198 move to end and remove all visible items one at a time. listview->positionViewAtEnd(); for (int i = 0; i < 18; ++i) diff --git a/tests/auto/qtquick1/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/qtquick1/qdeclarativelistview/tst_qdeclarativelistview.cpp index 5bfa08e943..d2519b0f9f 100644 --- a/tests/auto/qtquick1/qdeclarativelistview/tst_qdeclarativelistview.cpp +++ b/tests/auto/qtquick1/qdeclarativelistview/tst_qdeclarativelistview.cpp @@ -725,9 +725,16 @@ void tst_QDeclarative1ListView::removed(bool animated) QCOMPARE(name->text(), QString("New")); // Add some more items so that we don't run out - for (int i = 50; i < 100; i++) + model.clear(); + for (int i = 0; i < 50; i++) model.addItem("Item" + QString::number(i), ""); + // QTBUG-QTBUG-20575 + listview->setCurrentIndex(0); + listview->setContentY(30); + model.removeItem(0); + QTRY_VERIFY(name = findItem<QDeclarative1Text>(contentItem, "textName", 0)); + // QTBUG-19198 move to end and remove all visible items one at a time. listview->positionViewAtEnd(); for (int i = 0; i < 18; ++i) |