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.

This commit is contained in:
Luis Ángel San Martín 2016-04-15 17:05:59 +02:00
parent 4ef185c885
commit 6c76aaffc8
3 changed files with 17 additions and 8 deletions

View File

@ -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);

View File

@ -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);
}

View File

@ -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;