diff --git a/ChangeLog.md b/ChangeLog.md index c70d5b847..69b2b9d66 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -4,6 +4,7 @@ * Fixed movement cost penalty from terrain * Fixed empty Black Market on game start * Fixed centering of scenario information window +* Fixed crash on empty save game list after filtering * Fixed blocked progress in Launcher on language detection failure * Launcher will now correctly handle selection of Data directory in H3 install diff --git a/client/lobby/CSavingScreen.cpp b/client/lobby/CSavingScreen.cpp index daf154349..59741d916 100644 --- a/client/lobby/CSavingScreen.cpp +++ b/client/lobby/CSavingScreen.cpp @@ -31,8 +31,6 @@ CSavingScreen::CSavingScreen() { OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE; center(pos); - // TODO: we should really use std::shared_ptr for passing StartInfo around. - localSi = new StartInfo(*LOCPLINT->cb->getStartInfo()); localMi = std::make_shared(); localMi->mapHeader = std::unique_ptr(new CMapHeader(*LOCPLINT->cb->getMapHeader())); @@ -52,7 +50,9 @@ const CMapInfo * CSavingScreen::getMapInfo() const StartInfo * CSavingScreen::getStartInfo() { - return localSi; + if (localMi) + return localMi->scenarioOptionsOfSave; + return LOCPLINT->cb->getStartInfo(); } void CSavingScreen::changeSelection(std::shared_ptr to) @@ -61,7 +61,6 @@ void CSavingScreen::changeSelection(std::shared_ptr to) return; localMi = to; - localSi = localMi->scenarioOptionsOfSave; card->changeSelection(); } diff --git a/client/lobby/CSavingScreen.h b/client/lobby/CSavingScreen.h index b7ac05012..e99809407 100644 --- a/client/lobby/CSavingScreen.h +++ b/client/lobby/CSavingScreen.h @@ -23,7 +23,6 @@ class CSelectionBase; class CSavingScreen : public CSelectionBase { public: - const StartInfo * localSi; std::shared_ptr localMi; CSavingScreen();