src/gui/itemviews/qtreeview.cpp
branchRCL_3
changeset 8 3f74d0d4af4c
parent 4 3b1da2848fc7
--- a/src/gui/itemviews/qtreeview.cpp	Mon Mar 15 12:43:09 2010 +0200
+++ b/src/gui/itemviews/qtreeview.cpp	Thu Apr 08 14:19:33 2010 +0300
@@ -2474,10 +2474,11 @@
 
         QVector<QTreeViewItem> insertedItems(delta);
         for (int i = 0; i < delta; ++i) {
-            insertedItems[i].index = d->model->index(i + start, 0, parent);
-            insertedItems[i].level = childLevel;
-            insertedItems[i].hasChildren = d->hasVisibleChildren(insertedItems[i].index);
-            insertedItems[i].hasMoreSiblings = !((i == delta - 1) && (parentRowCount == end +1));
+            QTreeViewItem &item = insertedItems[i];
+            item.index = d->model->index(i + start, 0, parent);
+            item.level = childLevel;
+            item.hasChildren = d->hasVisibleChildren(item.index);
+            item.hasMoreSiblings = !((i == delta - 1) && (parentRowCount == end +1));
         }
         if (d->viewItems.isEmpty())
             d->defaultItemHeight = indexRowSizeHint(insertedItems[0].index);
@@ -3769,10 +3770,15 @@
         if (previousSibiling != -1 && after && model->rowCount(parent) == start)
             viewItems[previousSibiling].hasMoreSiblings = false;
 
-
-        updateChildCount(parentItem, -removedCount);
-        if (parentItem != -1 && viewItems.at(parentItem).total == 0)
-            viewItems[parentItem].hasChildren = false; //every children have been removed;
+        if (parentItem != -1) {
+            if (viewItems.at(parentItem).expanded) {
+                updateChildCount(parentItem, -removedCount);
+                if (viewItems.at(parentItem).total == 0)
+                    viewItems[parentItem].hasChildren = false; //every children have been removed;
+            } else if (viewItems[parentItem].hasChildren && !hasVisibleChildren(parent)) {
+                viewItems[parentItem].hasChildren = false;
+            }
+        }
         if (after) {
             q->updateGeometries();
             viewport->update();