From 4cff84737dbcae35437375c3ce62bac1b1e7ebf8 Mon Sep 17 00:00:00 2001 From: Craig Watson Date: Sat, 7 Jan 2017 18:54:11 -0500 Subject: [PATCH] When loading a scene that is about to be deleted, don't cache the previous and next scenes. This prevents crashes that may occur when deleting multiple pages from a document. --- src/core/UBPersistenceManager.cpp | 14 ++++++++------ src/core/UBPersistenceManager.h | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/core/UBPersistenceManager.cpp b/src/core/UBPersistenceManager.cpp index bcef40aa..280acfea 100644 --- a/src/core/UBPersistenceManager.cpp +++ b/src/core/UBPersistenceManager.cpp @@ -483,7 +483,7 @@ void UBPersistenceManager::deleteDocumentScenes(UBDocumentProxy* proxy, const QL foreach(int index, compactedIndexes) { - UBGraphicsScene *scene = loadDocumentScene(proxy, index); + UBGraphicsScene *scene = loadDocumentScene(proxy, index, false); if (scene) { //scene is about to move into new document @@ -727,7 +727,7 @@ void UBPersistenceManager::moveSceneToIndex(UBDocumentProxy* proxy, int source, } -UBGraphicsScene* UBPersistenceManager::loadDocumentScene(UBDocumentProxy* proxy, int sceneIndex) +UBGraphicsScene* UBPersistenceManager::loadDocumentScene(UBDocumentProxy* proxy, int sceneIndex, bool cacheNeighboringScenes) { UBGraphicsScene* scene = NULL; @@ -740,11 +740,13 @@ UBGraphicsScene* UBPersistenceManager::loadDocumentScene(UBDocumentProxy* proxy, mSceneCache.insert(proxy, sceneIndex, scene); } - if(sceneIndex + 1 < proxy->pageCount() && !mSceneCache.contains(proxy, sceneIndex + 1)) - mWorker->readScene(proxy,sceneIndex+1); + if (cacheNeighboringScenes) { + if(sceneIndex + 1 < proxy->pageCount() && !mSceneCache.contains(proxy, sceneIndex + 1)) + mWorker->readScene(proxy,sceneIndex+1); - if(sceneIndex - 1 >= 0 && !mSceneCache.contains(proxy, sceneIndex - 1)) - mWorker->readScene(proxy,sceneIndex-1); + if(sceneIndex - 1 >= 0 && !mSceneCache.contains(proxy, sceneIndex - 1)) + mWorker->readScene(proxy,sceneIndex-1); + } return scene; } diff --git a/src/core/UBPersistenceManager.h b/src/core/UBPersistenceManager.h index bd981106..08556061 100644 --- a/src/core/UBPersistenceManager.h +++ b/src/core/UBPersistenceManager.h @@ -85,7 +85,7 @@ class UBPersistenceManager : public QObject virtual void moveSceneToIndex(UBDocumentProxy* pDocumentProxy, int source, int target); - virtual UBGraphicsScene* loadDocumentScene(UBDocumentProxy* pDocumentProxy, int sceneIndex); + virtual UBGraphicsScene* loadDocumentScene(UBDocumentProxy* pDocumentProxy, int sceneIndex, bool cacheNeighboringScenes = true); UBGraphicsScene *getDocumentScene(UBDocumentProxy* pDocumentProxy, int sceneIndex) {return mSceneCache.value(pDocumentProxy, sceneIndex);} QList > documentProxies;