79a460b
From 6da6b7099d4e0b49329793e4b90703ec3d868048 Mon Sep 17 00:00:00 2001
79a460b
From: Frank Reininghaus <frank78ac@googlemail.com>
79a460b
Date: Wed, 22 Sep 2010 10:19:59 +0200
79a460b
Subject: [PATCH] QTreeView: do not scroll to top if last item is removed
79a460b
79a460b
When the last item is the current item and is removed,
79a460b
QTreeViewPrivate::updateScrollBars() is called after QTreeViewPrivate's
79a460b
viewItems member is cleared. This commit makes sure that viewItems is
79a460b
restored by calling QTreeView::doItemsLayout() in this case, preventing
79a460b
that the scroll bar range is set to zero temporarily and the view is
79a460b
scrolled to the top unexpectedly (this was a regression in 4.7.0:
79a460b
QTBUG-13567).
79a460b
79a460b
Merge-request: 2481
79a460b
Reviewed-by: Olivier Goffart <olivier.goffart@nokia.com>
79a460b
79a460b
diff --git a/src/gui/itemviews/qtreeview.cpp b/src/gui/itemviews/qtreeview.cpp
79a460b
index b797776..40b51fe 100644
79a460b
--- a/src/gui/itemviews/qtreeview.cpp
79a460b
+++ b/src/gui/itemviews/qtreeview.cpp
79a460b
@@ -3435,6 +3435,10 @@ void QTreeViewPrivate::updateScrollBars()
79a460b
     if (!viewportSize.isValid())
79a460b
         viewportSize = QSize(0, 0);
79a460b
 
79a460b
+    if (viewItems.isEmpty()) {
79a460b
+        q->doItemsLayout();
79a460b
+    }
79a460b
+
79a460b
     int itemsInViewport = 0;
79a460b
     if (uniformRowHeights) {
79a460b
         if (defaultItemHeight <= 0)