From 422ab4c53764fb3bbc4287c7b6d18f4101f55a70 Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Thu, 27 Mar 2014 10:02:41 +0100 Subject: [PATCH] scene are deleted on gui thread --- src/core/UBPersistenceManager.cpp | 7 +++++++ src/core/UBPersistenceManager.h | 1 + src/core/UBPersistenceWorker.cpp | 5 +++-- src/core/UBPersistenceWorker.h | 1 + 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/core/UBPersistenceManager.cpp b/src/core/UBPersistenceManager.cpp index 073b0ee4..cf4b9261 100644 --- a/src/core/UBPersistenceManager.cpp +++ b/src/core/UBPersistenceManager.cpp @@ -86,6 +86,7 @@ UBPersistenceManager::UBPersistenceManager(QObject *pParent) connect(mWorker, SIGNAL(finished()), mWorker, SLOT(deleteLater())); connect(mThread, SIGNAL(finished()), mThread, SLOT(deleteLater())); connect(mWorker,SIGNAL(sceneLoaded(QByteArray,UBDocumentProxy*,int)),this,SLOT(onSceneLoaded(QByteArray,UBDocumentProxy*,int))); + connect(mWorker,SIGNAL(scenePersisted(UBGraphicsScene*)),this,SLOT(onScenePersisted(UBGraphicsScene*))); mThread->start(); } @@ -107,6 +108,12 @@ void UBPersistenceManager::destroy() sSingleton = NULL; } +void UBPersistenceManager::onScenePersisted(UBGraphicsScene* scene) +{ + delete scene; + scene = NULL; +} + void UBPersistenceManager::onWorkerFinished() { mIsWorkerFinished = true; diff --git a/src/core/UBPersistenceManager.h b/src/core/UBPersistenceManager.h index 687c5c9c..9fa1a590 100644 --- a/src/core/UBPersistenceManager.h +++ b/src/core/UBPersistenceManager.h @@ -160,6 +160,7 @@ class UBPersistenceManager : public QObject void errorString(QString error); void onSceneLoaded(QByteArray,UBDocumentProxy*,int); void onWorkerFinished(); + void onScenePersisted(UBGraphicsScene* scene); }; diff --git a/src/core/UBPersistenceWorker.cpp b/src/core/UBPersistenceWorker.cpp index 761e8e0c..993767a7 100644 --- a/src/core/UBPersistenceWorker.cpp +++ b/src/core/UBPersistenceWorker.cpp @@ -63,8 +63,9 @@ void UBPersistenceWorker::process() PersistenceInformation info = saves.takeFirst(); if(info.action == WriteScene){ UBSvgSubsetAdaptor::persistScene(info.proxy, info.scene, info.sceneIndex); - delete info.scene; - info.scene = NULL; +// delete info.scene; +// info.scene = NULL; + emit scenePersisted(info.scene); } else{ emit sceneLoaded(UBSvgSubsetAdaptor::loadSceneAsText(info.proxy,info.sceneIndex), info.proxy, info.sceneIndex); diff --git a/src/core/UBPersistenceWorker.h b/src/core/UBPersistenceWorker.h index 93f9b697..eb3c273b 100644 --- a/src/core/UBPersistenceWorker.h +++ b/src/core/UBPersistenceWorker.h @@ -55,6 +55,7 @@ signals: void finished(); void error(QString string); void sceneLoaded(QByteArray text,UBDocumentProxy* proxy, const int pageIndex); + void scenePersisted(UBGraphicsScene* scene); public slots: void process();