diff options
author | Yoann Lopes <yoann.lopes@nokia.com> | 2010-07-09 14:28:18 (GMT) |
---|---|---|
committer | Yoann Lopes <yoann.lopes@nokia.com> | 2010-07-13 10:44:21 (GMT) |
commit | 7d09f690d5b4c56699092444665d1879deb86a6e (patch) | |
tree | 126eb0831e5662a1b3290a300f8f810916aa8a7a /src/gui/graphicsview/qgraphicswidget_p.cpp | |
parent | ee3ad7e774a959454eb3c367b40a8a4bdfab45bc (diff) | |
download | Qt-7d09f690d5b4c56699092444665d1879deb86a6e.zip Qt-7d09f690d5b4c56699092444665d1879deb86a6e.tar.gz Qt-7d09f690d5b4c56699092444665d1879deb86a6e.tar.bz2 |
Fixes crash in QGraphicsScene::addItem().
Crashed because tabFocusFirst could end up being a dangling pointer when
removing an item from the scene before deleting it.
When setting tabFocusFirst in fixFocusChainBeforeReparenting, we now
check that the item is in the scene. If it is not, tabFocusFirst is set
to 0.
Autotest included.
Task-number: QTBUG-12056
Reviewed-by: Alexis Ménard <alexis.menard@nokia.com>
Diffstat (limited to 'src/gui/graphicsview/qgraphicswidget_p.cpp')
-rw-r--r-- | src/gui/graphicsview/qgraphicswidget_p.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/gui/graphicsview/qgraphicswidget_p.cpp b/src/gui/graphicsview/qgraphicswidget_p.cpp index 28070da..f7850ca 100644 --- a/src/gui/graphicsview/qgraphicswidget_p.cpp +++ b/src/gui/graphicsview/qgraphicswidget_p.cpp @@ -761,7 +761,7 @@ void QGraphicsWidgetPrivate::fixFocusChainBeforeReparenting(QGraphicsWidget *new QGraphicsWidget *firstOld = 0; bool wasPreviousNew = true; - + while (w != q) { bool isCurrentNew = q->isAncestorOf(w); if (isCurrentNew) { @@ -796,7 +796,7 @@ void QGraphicsWidgetPrivate::fixFocusChainBeforeReparenting(QGraphicsWidget *new newScene = newParent->scene(); if (oldScene && newScene != oldScene) - oldScene->d_func()->tabFocusFirst = firstOld; + oldScene->d_func()->tabFocusFirst = (firstOld && firstOld->scene() == oldScene) ? firstOld : 0; QGraphicsItem *topLevelItem = newParent ? newParent->topLevelItem() : 0; QGraphicsWidget *topLevel = 0; |