on xenial help sign in
LVWPH: Reset to initial values when list is empty

Fixes: #1540490 Approved by: Andrea Cimitan

commiteed5bda67fc530c33f418806d0365d2876bf197a authorAlbert Astals Cid <albert.astals@canonical.com> dateMon 8 Feb 2016, 09:37 (11 years ago) parent29057a145f16b5
4 files changed+42−10
plugins/Dash/listviewwithpageheader.cpp+18−9 plugins/Dash/listviewwithpageheader.h+1 tests/plugins/Dash/listviewwithpageheadertest.cpp+23 tests/plugins/Dash/listviewwithpageheadertest.qml−1
plugins/Dash/listviewwithpageheader.cpp+18−9
@@ -219,13 +219,7 @@ void ListViewWithPageHeader::setDelegate(QQmlComponent *delegate)
219219 Q_FOREACH(ListItem *item, m_visibleItems)
220220 releaseItem(item);
221221 m_visibleItems.clear();
222− m_firstVisibleIndex = -1;
223− adjustMinYExtent();
224− setContentY(0);
225− m_clipItem->setY(0);
226− if (m_topSectionItem) {
227− QQuickItemPrivate::get(m_topSectionItem)->setCulled(true);
228− }
222+ initializeValuesForEmptyList();
229223
230224 m_delegateModel->setDelegate(delegate);
231225
@@ -236,6 +230,17 @@ void ListViewWithPageHeader::setDelegate(QQmlComponent *delegate)
236230 }
237231}
238232
233+void ListViewWithPageHeader::initializeValuesForEmptyList()
234+{
235+ m_firstVisibleIndex = -1;
236+ adjustMinYExtent();
237+ setContentY(0);
238+ m_clipItem->setY(0);
239+ if (m_topSectionItem) {
240+ QQuickItemPrivate::get(m_topSectionItem)->setCulled(true);
241+ }
242+}
243+
239244QQuickItem *ListViewWithPageHeader::header() const
240245{
241246 return m_headerItem;
@@ -835,7 +840,7 @@ bool ListViewWithPageHeader::removeNonVisibleItems(qreal bufferFrom, qreal buffe
835840 }
836841 }
837842 if (!foundVisible) {
838− m_firstVisibleIndex = -1;
843+ initializeValuesForEmptyList();
839844 }
840845 if (m_firstVisibleIndex != oldFirstVisibleIndex) {
841846 adjustMinYExtent();
@@ -1092,7 +1097,11 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
10921097 }
10931098
10941099 if (m_firstVisibleIndex != oldFirstVisibleIndex) {
1095− adjustMinYExtent();
1100+ if (m_visibleItems.isEmpty()) {
1101+ initializeValuesForEmptyList();
1102+ } else {
1103+ adjustMinYExtent();
1104+ }
10961105 }
10971106
10981107 for (int i = 0; i < m_visibleItems.count(); ++i) {
plugins/Dash/listviewwithpageheader.h+1
@@ -168,6 +168,7 @@ private:
168168 QQuickItem *getSectionItem(int modelIndex, bool alreadyInserted);
169169 QQuickItem *getSectionItem(const QString &sectionText);
170170 void updateSectionItem(int modelIndex);
171+ void initializeValuesForEmptyList();
171172
172173 QQmlDelegateModel *m_delegateModel;
173174
tests/plugins/Dash/listviewwithpageheadertest.cpp+23
@@ -1954,6 +1954,29 @@ private Q_SLOTS:
19541954 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
19551955 }
19561956
1957+ void testBug1540490()
1958+ {
1959+ lvwph->header()->setImplicitHeight(150);
1960+ verifyItem(0, 150., 150., false);
1961+
1962+ QMetaObject::invokeMethod(model, "removeItems", Q_ARG(QVariant, 3), Q_ARG(QVariant, 3));
1963+ model->setProperty(0, "size", 400);
1964+ model->setProperty(1, "size", 600);
1965+ model->setProperty(2, "size", 300);
1966+
1967+ scrollToBottom();
1968+ changeContentY(-200);
1969+
1970+ QMetaObject::invokeMethod(model, "removeItems", Q_ARG(QVariant, 1), Q_ARG(QVariant, 2));
1971+ model->setProperty(0, "size", 100);
1972+ QMetaObject::invokeMethod(model, "removeItems", Q_ARG(QVariant, 0), Q_ARG(QVariant, 1));
1973+ lvwph->header()->setImplicitHeight(50);
1974+ QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 0), Q_ARG(QVariant, 200));
1975+
1976+ QTRY_COMPARE(lvwph->m_visibleItems.count(), 1);
1977+ verifyItem(0, 50., 200., false);
1978+ }
1979+
19571980private:
19581981 QQuickView *view;
19591982 ListViewWithPageHeader *lvwph;
tests/plugins/Dash/listviewwithpageheadertest.qml−1
@@ -85,7 +85,6 @@ Rectangle {
8585 pageHeader: Rectangle {
8686 color: "transparent"
8787 width: parent.width
88− height: 50
8988 implicitHeight: 50
9089 Text {
9190 anchors.fill: parent