From: Martin Jones Date: Mon, 30 May 2011 05:26:06 +0000 (+1000) Subject: ListView segmentation fault when setting highlight to null X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=806f031efeda71d3f4d7d2f949b437493e79cf52;p=konrad%2Fqtdeclarative.git ListView segmentation fault when setting highlight to null Setting view highlight to null due to focus change caused a crash since graphicsview accessed the highlight item after it had been deleted. Remove highlight item from scene and deleteLater(), as is done for delegates. Change-Id: I5bfd59095aca90d3adca805bc4f61c92c192ee1b Task-number: QTBUG-19509 Reviewed-by: Bea Lam (cherry picked from commit b9d5cb9334e7d9da71af169802a01f8d344151a7) --- diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index a3395a4..7e8472a 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -818,7 +818,9 @@ void QDeclarativeGridViewPrivate::createHighlight() if (highlight) { if (trackedItem == highlight) trackedItem = 0; - delete highlight->item; + if (highlight->item->scene()) + highlight->item->scene()->removeItem(highlight->item); + highlight->item->deleteLater(); delete highlight; highlight = 0; delete highlightXAnimator; diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index ef6b032..29cb76e 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -943,7 +943,9 @@ void QDeclarativeListViewPrivate::createHighlight() if (highlight) { if (trackedItem == highlight) trackedItem = 0; - delete highlight->item; + if (highlight->item->scene()) + highlight->item->scene()->removeItem(highlight->item); + highlight->item->deleteLater(); delete highlight; highlight = 0; delete highlightPosAnimator; diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp index be2bd60..65ce3b2 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview.cpp +++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp @@ -203,7 +203,9 @@ void QDeclarativePathViewPrivate::createHighlight() bool changed = false; if (highlightItem) { - delete highlightItem; + if (highlightItem->scene()) + highlightItem->scene()->removeItem(highlightItem); + highlightItem->deleteLater(); highlightItem = 0; changed = true; }