diff options
author | J-P Nurmi <jpnurmi@gmail.com> | 2009-10-09 07:45:45 (GMT) |
---|---|---|
committer | Alexis Menard <alexis.menard@nokia.com> | 2009-10-09 07:46:23 (GMT) |
commit | fc3dfc20d487cb4fd2f93bd9fa36eef85a7467a3 (patch) | |
tree | 658ccef93309ca9e58654ec32cd80a19a6775ee4 /tests/auto | |
parent | 0054b444a202d08167c49a1a94fd2d306d14f91f (diff) | |
download | Qt-fc3dfc20d487cb4fd2f93bd9fa36eef85a7467a3.zip Qt-fc3dfc20d487cb4fd2f93bd9fa36eef85a7467a3.tar.gz Qt-fc3dfc20d487cb4fd2f93bd9fa36eef85a7467a3.tar.bz2 |
Fixed a potential crash in QGraphicsScenePrivate::_q_polishItems()
This patch make sure that we always start from the beginning of
the unpolished items list and we erase the first value at each iteration.
The patch also convert the list to a set that is more appropriate here.
Merge-request: 1707
Reviewed-by: Alexis Menard <alexis.menard@nokia.com>
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp index 8459331..6c5fe90 100644 --- a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp +++ b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp @@ -266,6 +266,7 @@ private slots: void dispatchHoverOnPress(); void initialFocus_data(); void initialFocus(); + void polishItems(); // task specific tests below me void task139710_bspTreeCrash(); @@ -3884,5 +3885,32 @@ void tst_QGraphicsScene::initialFocus() QCOMPARE(rect->hasFocus(), shouldHaveFocus); } +class PolishItem : public QGraphicsTextItem +{ +public: + PolishItem(QGraphicsItem *parent = 0) : QGraphicsTextItem(parent) { } + +protected: + QVariant itemChange(GraphicsItemChange change, const QVariant& value) + { + if (change == ItemVisibleChange) { + if (value.toBool()) + qDeleteAll(childItems()); + } + return QGraphicsItem::itemChange(change, value); + } +}; + +void tst_QGraphicsScene::polishItems() +{ + QGraphicsScene scene; + PolishItem *parent = new PolishItem; + scene.addItem(parent); + PolishItem *child = new PolishItem(parent); + Q_UNUSED(child) + // test that QGraphicsScenePrivate::_q_polishItems() doesn't crash + QMetaObject::invokeMethod(&scene,"_q_polishItems"); +} + QTEST_MAIN(tst_QGraphicsScene) #include "tst_qgraphicsscene.moc" |