A change in ListView's header height can cause it to overlap the items
authorMartin Jones <martin.jones@nokia.com>
Wed, 27 Jul 2011 08:11:21 +0000 (18:11 +1000)
committerQt by Nokia <qt-info@nokia.com>
Thu, 28 Jul 2011 03:05:16 +0000 (05:05 +0200)
If there are no visibleItems the header has no choice but to
set visiblePos to a value after itself.

Change-Id: I7748db46272989e421eeca88577b6fcf79814b5b
Fixes: QTBUG-19844
Reviewed-on: http://codereview.qt.nokia.com/2254
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Bea Lam <bea.lam@nokia.com>
src/qtquick1/graphicsitems/qdeclarativelistview.cpp
tests/auto/qtquick1/qdeclarativelistview/tst_qdeclarativelistview.cpp

index e24b630..4c01514 100644 (file)
@@ -1281,8 +1281,7 @@ void QDeclarative1ListViewPrivate::updateHeader()
                     header->setPosition(startPos - header->size());
             }
         } else {
-            if (itemCount == 0)
-                visiblePos = header->size();
+            visiblePos = header->size();
             header->setPosition(0);
         }
     }
index 0742673..5bfa08e 100644 (file)
@@ -1950,6 +1950,38 @@ void tst_QDeclarative1ListView::header()
 
         delete canvas;
     }
+    {
+        // QTBUG-19844
+        QDeclarativeView *canvas = createView();
+
+        TestModel model;
+
+        QDeclarativeContext *ctxt = canvas->rootContext();
+        ctxt->setContextProperty("testModel", &model);
+
+        canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/header.qml"));
+        qApp->processEvents();
+
+        QDeclarative1ListView *listview = findItem<QDeclarative1ListView>(canvas->rootObject(), "list");
+        QTRY_VERIFY(listview != 0);
+
+        QDeclarativeItem *contentItem = listview->contentItem();
+        QTRY_VERIFY(contentItem != 0);
+
+        QDeclarative1Text *header = findItem<QDeclarative1Text>(contentItem, "header");
+        QVERIFY(header);
+
+        header->setHeight(500);
+
+        model.addItem("Item 0", "");
+
+        header->setHeight(40);
+        QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "wrapper", 0);
+        QVERIFY(item);
+        QTRY_VERIFY(header->y() + header->height() == item->y());
+
+        delete canvas;
+    }
 }
 
 void tst_QDeclarative1ListView::footer()