From 6473d4fa0f39166820e8cea63f7a03f578d127da Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Wed, 14 Dec 2011 16:40:41 +0300 Subject: [PATCH] SANKORE-332 / SANKORE-300 : fix crash --- src/board/UBBoardController.cpp | 4 +++- src/frameworks/UBCoreGraphicsScene.cpp | 13 +++++++++++++ src/frameworks/UBCoreGraphicsScene.h | 3 +++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp index 60ef79ee..17d47678 100644 --- a/src/board/UBBoardController.cpp +++ b/src/board/UBBoardController.cpp @@ -1212,7 +1212,9 @@ void UBBoardController::ClearUndoStack() QGraphicsItem* item = itUniq.next(); UBGraphicsScene *scene = (UBGraphicsScene*)item->scene(); if(!scene) - delete item; + { + bool retCode = mActiveScene->deleteItem(item); + } } } diff --git a/src/frameworks/UBCoreGraphicsScene.cpp b/src/frameworks/UBCoreGraphicsScene.cpp index 4412f9b1..bcac6202 100644 --- a/src/frameworks/UBCoreGraphicsScene.cpp +++ b/src/frameworks/UBCoreGraphicsScene.cpp @@ -53,3 +53,16 @@ void UBCoreGraphicsScene::removeItem(QGraphicsItem* item, bool forceDelete) delete item; } } + +bool UBCoreGraphicsScene::deleteItem(QGraphicsItem* item) +{ + if(mItemsToDelete.contains(item)) + { + mItemsToDelete.remove(item); + delete item; + return true; + } + else + return false; +} + diff --git a/src/frameworks/UBCoreGraphicsScene.h b/src/frameworks/UBCoreGraphicsScene.h index fdeaae49..656f2a00 100644 --- a/src/frameworks/UBCoreGraphicsScene.h +++ b/src/frameworks/UBCoreGraphicsScene.h @@ -28,6 +28,9 @@ class UBCoreGraphicsScene : public QGraphicsScene virtual void removeItem(QGraphicsItem* item, bool forceDelete = false); + virtual bool deleteItem(QGraphicsItem* item); + + private: QSet mItemsToDelete; };