on xenial help sign in
LVWPH: Make sure m_firstVisibleIndex is correctly set on removeNonVisibleItems
fb68af0Albert Astals
plugins/DashViews/listviewwithpageheader.cpp+3
@@ -772,6 +772,9 @@ bool ListViewWithPageHeader::removeNonVisibleItems(qreal bufferFrom, qreal buffe
772 ++i;
772 ++i;
773 }
773 }
774 }
774 }
775+ if (!foundVisible) {
776+ m_firstVisibleIndex = -1;
777+ }
775 if (m_firstVisibleIndex != oldFirstVisibleIndex) {
778 if (m_firstVisibleIndex != oldFirstVisibleIndex) {
776 adjustMinYExtent();
779 adjustMinYExtent();
777 }
780 }
tests/plugins/DashViews/listviewwithpageheadertest.cpp+20
@@ -1887,6 +1887,26 @@ private Q_SLOTS:
1887 QTRY_COMPARE(lvwph->m_visibleItems.count(), 1);
1887 QTRY_COMPARE(lvwph->m_visibleItems.count(), 1);
1888 }
1888 }
1889
1889
1890+ void testResizeScrolledBigItem()
1891+ {
1892+ QMetaObject::invokeMethod(model, "removeItems", Q_ARG(QVariant, 0), Q_ARG(QVariant, 6));
1893+ QTRY_COMPARE(lvwph->m_visibleItems.count(), 0);
1894+
1895+ QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 0), Q_ARG(QVariant, 10000));
1896+ changeContentY(8000);
1897+
1898+ // Pretend the list is busy requesting some other index
1899+ lvwph->m_asyncRequestedIndex = 4;
1900+
1901+ lvwph->m_visibleItems[0]->m_item->setHeight(100);
1902+ // This resize makes the item go outside the viewport so its deleted
1903+ QCOMPARE(lvwph->m_visibleItems.count(), 0);
1904+ QCOMPARE(lvwph->m_firstVisibleIndex, -1);
1905+ // On the next polish the item will be readded
1906+ QTRY_COMPARE(lvwph->m_visibleItems.count(), 1);
1907+ QTRY_COMPARE(lvwph->m_firstVisibleIndex, 0);
1908+ }
1909+
1890private:
1910private:
1891 QQuickView *view;
1911 QQuickView *view;
1892 ListViewWithPageHeader *lvwph;
1912 ListViewWithPageHeader *lvwph;