apply upstream patch to fix QTreeView-regression

This commit is contained in:
Than Ngo 2010-09-27 12:38:25 +02:00
parent a4cb425a1d
commit 79a460b197
2 changed files with 83 additions and 1 deletions

View File

@ -0,0 +1,77 @@
From 6da6b7099d4e0b49329793e4b90703ec3d868048 Mon Sep 17 00:00:00 2001
From: Frank Reininghaus <frank78ac@googlemail.com>
Date: Wed, 22 Sep 2010 10:19:59 +0200
Subject: [PATCH] QTreeView: do not scroll to top if last item is removed
When the last item is the current item and is removed,
QTreeViewPrivate::updateScrollBars() is called after QTreeViewPrivate's
viewItems member is cleared. This commit makes sure that viewItems is
restored by calling QTreeView::doItemsLayout() in this case, preventing
that the scroll bar range is set to zero temporarily and the view is
scrolled to the top unexpectedly (this was a regression in 4.7.0:
QTBUG-13567).
Merge-request: 2481
Reviewed-by: Olivier Goffart <olivier.goffart@nokia.com>
---
src/gui/itemviews/qtreeview.cpp | 4 ++++
tests/auto/qtreeview/tst_qtreeview.cpp | 22 ++++++++++++++++++++++
2 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/src/gui/itemviews/qtreeview.cpp b/src/gui/itemviews/qtreeview.cpp
index b797776..40b51fe 100644
--- a/src/gui/itemviews/qtreeview.cpp
+++ b/src/gui/itemviews/qtreeview.cpp
@@ -3435,6 +3435,10 @@ void QTreeViewPrivate::updateScrollBars()
if (!viewportSize.isValid())
viewportSize = QSize(0, 0);
+ if (viewItems.isEmpty()) {
+ q->doItemsLayout();
+ }
+
int itemsInViewport = 0;
if (uniformRowHeights) {
if (defaultItemHeight <= 0)
diff --git a/tests/auto/qtreeview/tst_qtreeview.cpp b/tests/auto/qtreeview/tst_qtreeview.cpp
index 7e2e800..c7b53e9 100644
--- a/tests/auto/qtreeview/tst_qtreeview.cpp
+++ b/tests/auto/qtreeview/tst_qtreeview.cpp
@@ -240,6 +240,7 @@ private slots:
void taskQTBUG_6450_selectAllWith1stColumnHidden();
void taskQTBUG_9216_setSizeAndUniformRowHeightsWrongRepaint();
void taskQTBUG_11466_keyboardNavigationRegression();
+ void taskQTBUG_13567_removeLastItemRegression();
};
class QtTestModel: public QAbstractItemModel
@@ -3910,5 +3911,26 @@ void tst_QTreeView::taskQTBUG_11466_keyboardNavigationRegression()
QTRY_COMPARE(treeView.currentIndex(), treeView.selectionModel()->selection().indexes().first());
}
+void tst_QTreeView::taskQTBUG_13567_removeLastItemRegression()
+{
+ QtTestModel model(200, 1);
+
+ QTreeView view;
+ view.setSelectionMode(QAbstractItemView::ExtendedSelection);
+ view.setModel(&model);
+ view.show();
+ QTest::qWaitForWindowShown(&view);
+
+ view.scrollToBottom();
+ QTest::qWait(10);
+ CHECK_VISIBLE(199, 0);
+
+ view.setCurrentIndex(model.index(199, 0));
+ model.removeLastRow();
+ QTest::qWait(10);
+ QCOMPARE(view.currentIndex(), model.index(198, 0));
+ CHECK_VISIBLE(198, 0);
+}
+
QTEST_MAIN(tst_QTreeView)
#include "tst_qtreeview.moc"
--
1.6.1

View File

@ -18,7 +18,7 @@ Summary: Qt toolkit
Name: qt
Epoch: 1
Version: 4.7.0
Release: 3%{?dist}
Release: 4%{?dist}
# See LGPL_EXCEPTIONS.txt, LICENSE.GPL3, respectively, for exception details
License: (LGPLv2 with exceptions or GPLv3 with exceptions) and ASL 2.0 and BSD and FTL and MIT
@ -82,6 +82,7 @@ Patch62: qt-4.6.3-indic-rendering-bz636399.patch
# security patches
# upstream patches
Patch100: qt-everywhere-opensource-src-4.7.0-QTBUG-13567-QTreeView.patch
# kde-qt git patches
Patch202: 0002-This-patch-makes-override-redirect-windows-popup-men.patch
@ -435,6 +436,7 @@ Qt libraries used for drawing widgets and OpenGL items.
# security fixes
# upstream patches
%patch100 -p1 -b .QTBUG-13567-QTreeView
# kde-qt branch
%if 0%{?kde_qt}
@ -1095,6 +1097,9 @@ fi
%changelog
* Mon Sep 27 2010 Than Ngo <than@redhat.com> - 4.7.0-4
- apply upstream patch to fix QTreeView-regression
* Thu Sep 23 2010 Than Ngo <than@redhat.com> - 4.7.0-3
- fix typo in license