From 6c76aaffc8c4e22842a040d2761099886011b5d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Fri, 15 Apr 2016 17:05:59 +0200 Subject: [PATCH] Keep all comics views in memory, views are going to be created lazily. This should fix the issues with QML context deallocating objects between views switching. --- YACReaderLibrary/grid_comics_view.cpp | 5 +++-- YACReaderLibrary/library_window.cpp | 1 - .../yacreader_comics_views_manager.cpp | 19 ++++++++++++++----- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/YACReaderLibrary/grid_comics_view.cpp b/YACReaderLibrary/grid_comics_view.cpp index a9c42d9d..3e28e25a 100644 --- a/YACReaderLibrary/grid_comics_view.cpp +++ b/YACReaderLibrary/grid_comics_view.cpp @@ -477,10 +477,11 @@ void GridComicsView::closeEvent(QCloseEvent *event) toolbar->removeAction(toolBarStretchAction); toolbar->removeAction(coverSizeSliderAction); - QObject *object = view->rootObject(); + /*QObject *object = view->rootObject(); QMetaObject::invokeMethod(object, "exit"); container->close(); - view->close(); + view->close();*/ + event->accept(); ComicsView::closeEvent(event); diff --git a/YACReaderLibrary/library_window.cpp b/YACReaderLibrary/library_window.cpp index 798780f9..9def54cf 100644 --- a/YACReaderLibrary/library_window.cpp +++ b/YACReaderLibrary/library_window.cpp @@ -1267,7 +1267,6 @@ void LibraryWindow::loadLibrary(const QString & name) void LibraryWindow::loadCoversFromCurrentModel() { - comicsViewsManager->comicsView->setModel(new ComicModel()); //TODO fix this comicsViewsManager->comicsView->setModel(comicsModel); } diff --git a/YACReaderLibrary/yacreader_comics_views_manager.cpp b/YACReaderLibrary/yacreader_comics_views_manager.cpp index 92709c93..39cc2c9f 100644 --- a/YACReaderLibrary/yacreader_comics_views_manager.cpp +++ b/YACReaderLibrary/yacreader_comics_views_manager.cpp @@ -17,7 +17,7 @@ #include "options_dialog.h" YACReaderComicsViewsManager::YACReaderComicsViewsManager(QSettings *settings, LibraryWindow *parent) - : QObject(parent), libraryWindow(parent) + : QObject(parent), libraryWindow(parent), classicComicsView(nullptr), gridComicsView(nullptr), infoComicsView(nullptr) { comicsViewStack = new QStackedWidget(); @@ -154,7 +154,7 @@ void YACReaderComicsViewsManager::switchToComicsView(ComicsView * from, ComicsVi comicsViewStack->removeWidget(from); comicsViewStack->addWidget(comicsView); - delete from; + //delete from; No need to delete the previews view, because all views are going to be kept in memory //load content into current view libraryWindow->loadCoversFromCurrentModel(); @@ -182,7 +182,10 @@ void YACReaderComicsViewsManager::_toggleComicsView() #ifdef Q_OS_MAC libraryWindow->libraryToolBar->updateViewSelectorIcon(icoViewsButton); #endif - switchToComicsView(classicComicsView, gridComicsView = new GridComicsView()); + if(gridComicsView == nullptr) + gridComicsView = new GridComicsView(); + + switchToComicsView(classicComicsView, gridComicsView); connect(libraryWindow->optionsDialog, SIGNAL(optionsChanged()), gridComicsView, SLOT(updateBackgroundConfig())); comicsViewStatus = Grid; @@ -197,7 +200,10 @@ void YACReaderComicsViewsManager::_toggleComicsView() #ifdef Q_OS_MAC libraryWindow->libraryToolBar->updateViewSelectorIcon(icoViewsButton); #endif - switchToComicsView(gridComicsView, infoComicsView = new InfoComicsView()); + if(infoComicsView == nullptr) + infoComicsView = new InfoComicsView(); + + switchToComicsView(gridComicsView, infoComicsView); comicsViewStatus = Info; break; @@ -211,7 +217,10 @@ void YACReaderComicsViewsManager::_toggleComicsView() #ifdef Q_OS_MAC libraryWindow->libraryToolBar->updateViewSelectorIcon(icoViewsButton); #endif - switchToComicsView(infoComicsView, classicComicsView = new ClassicComicsView()); + if(classicComicsView == nullptr) + classicComicsView = new ClassicComicsView(); + + switchToComicsView(infoComicsView, classicComicsView); comicsViewStatus = Flow; break;