summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMarkku Heikkila <markku.heikkila@digia.com>2012-06-07 16:30:04 +0200
committerQt by Nokia <qt-info@nokia.com>2012-06-08 18:09:07 +0200
commit9e75354aabb752097e7e0d227f8b55f36237f6d5 (patch)
tree1dc843a22b94cad633c864fdf135fa5a83caf949 /tests
parenta95e396a83930de14c6964dbf3724d6162d8400b (diff)
Fix crash in QTreeWidgetItem::sortChildren when adding new item.
This is a cherry-pick of 4f388c383e39b598d997e21bd9a4f16d89bd0625 from February Recursive call is caused if user code calls QtreeWidgetItem()::sortChildren and sorting is enbled in QTreeWidget. First call is from user code and second is caused by timer. When timer expires second call is made. This recursion is prevented with QTreeModel::SkipSorting skipSorting() in QTreeWidgetItem::sortChildren(); Task-number: QTBUG-20345 Change-Id: Ibf73e69274423f31397a9e391bfba7d5c4103a3c Reviewed-by: Markku Tapio Heikkilä <markku.heikkila@digia.com> Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp
index 07e0e4f999..69a9bc2953 100644
--- a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp
+++ b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp
@@ -164,6 +164,7 @@ private slots:
void taskQTBUG2844_visualItemRect();
void setChildIndicatorPolicy();
+ void task20345_sortChildren();
public slots:
void itemSelectionChanged();
@@ -3342,6 +3343,38 @@ void tst_QTreeWidget::setChildIndicatorPolicy()
QTRY_COMPARE(delegate.numPaints, 1);
}
+void tst_QTreeWidget::task20345_sortChildren()
+{
+ // This test case is considered successful if it is executed (no crash in sorting)
+ QTreeWidget tw;
+ tw.setColumnCount(3);
+ tw.headerItem()->setText(0, "Col 0");
+ tw.headerItem()->setText(1, "Col 1");
+ tw.header()->setSortIndicator(0, Qt::AscendingOrder);
+ tw.setSortingEnabled(true);
+ tw.show();
+
+ QTreeWidgetItem *rootItem = 0;
+ QTreeWidgetItem *childItem = 0;
+
+ rootItem = new QTreeWidgetItem(&tw, QStringList("a"));
+ childItem = new QTreeWidgetItem(rootItem);
+ childItem->setText(1, "3");
+ childItem = new QTreeWidgetItem(rootItem);
+ childItem->setText(1, "1");
+ childItem = new QTreeWidgetItem(rootItem);
+ childItem->setText(1, "2");
+
+ tw.setCurrentItem(tw.topLevelItem(0));
+
+ QTreeWidgetItem * curItem = tw.currentItem();
+ int childCount = curItem->childCount() + 1;
+
+ QTreeWidgetItem * newItem = new QTreeWidgetItem(curItem);
+ newItem->setText(1, QString::number(childCount));
+ rootItem->sortChildren(1, Qt::AscendingOrder);
+ QVERIFY(1);
+}
QTEST_MAIN(tst_QTreeWidget)