Fix crash on exit when multiple windows are open

Controllers would delete their Views even if they failed to pop them from the window stack.

Have I mentioned that I really hate our MVC?
This commit is contained in:
Tamás Bálint Misius
2023-06-10 18:50:02 +02:00
parent eea0c54a36
commit c2f8a7df25
8 changed files with 32 additions and 16 deletions

View File

@@ -71,8 +71,10 @@ ConsoleView * ConsoleController::GetView()
ConsoleController::~ConsoleController() ConsoleController::~ConsoleController()
{ {
consoleView->CloseActiveWindow();
delete consoleModel; delete consoleModel;
delete consoleView; if (consoleView->CloseActiveWindow())
{
delete consoleView;
}
} }

View File

@@ -141,8 +141,10 @@ void LocalBrowserController::Exit()
LocalBrowserController::~LocalBrowserController() LocalBrowserController::~LocalBrowserController()
{ {
browserView->CloseActiveWindow();
delete browserModel; delete browserModel;
delete browserView; if (browserView->CloseActiveWindow())
{
delete browserView;
}
} }

View File

@@ -39,8 +39,10 @@ void LoginController::Exit()
LoginController::~LoginController() LoginController::~LoginController()
{ {
loginView->CloseActiveWindow();
delete loginModel; delete loginModel;
delete loginView; if (loginView->CloseActiveWindow())
{
delete loginView;
}
} }

View File

@@ -149,8 +149,10 @@ void OptionsController::Exit()
OptionsController::~OptionsController() OptionsController::~OptionsController()
{ {
view->CloseActiveWindow();
delete model; delete model;
delete view; if (view->CloseActiveWindow())
{
delete view;
}
} }

View File

@@ -171,8 +171,10 @@ void PreviewController::Exit()
PreviewController::~PreviewController() PreviewController::~PreviewController()
{ {
previewView->CloseActiveWindow();
Client::Ref().RemoveListener(this); Client::Ref().RemoveListener(this);
delete previewModel; delete previewModel;
delete previewView; if (previewView->CloseActiveWindow())
{
delete previewView;
}
} }

View File

@@ -58,8 +58,10 @@ void RenderController::Exit()
RenderController::~RenderController() RenderController::~RenderController()
{ {
renderView->CloseActiveWindow();
delete renderModel; delete renderModel;
delete renderView; if (renderView->CloseActiveWindow())
{
delete renderView;
}
} }

View File

@@ -85,9 +85,11 @@ void SearchController::Exit()
SearchController::~SearchController() SearchController::~SearchController()
{ {
delete activePreview; delete activePreview;
searchView->CloseActiveWindow();
delete searchModel; delete searchModel;
delete searchView; if (searchView->CloseActiveWindow())
{
delete searchView;
}
} }
void SearchController::DoSearch(String query, bool now) void SearchController::DoSearch(String query, bool now)

View File

@@ -46,8 +46,10 @@ void TagsController::Exit()
TagsController::~TagsController() TagsController::~TagsController()
{ {
tagsView->CloseActiveWindow();
delete tagsModel; delete tagsModel;
delete tagsView; if (tagsView->CloseActiveWindow())
{
delete tagsView;
}
} }