Fix: abort GRFFileScanner on exiting the game as soon as possible

This prevents the window from "freezing" when you close it during
the scanning of NewGRFs, as it first would continue the action.
This commit is contained in:
Patric Stout 2021-03-09 15:21:57 +01:00 committed by Patric Stout
parent b349ef6e71
commit 5426cb3baf
2 changed files with 6 additions and 1 deletions

View File

@ -603,6 +603,9 @@ public:
bool GRFFileScanner::AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename)
{
/* Abort if the user stopped the game during a scan. */
if (_exit_game) return false;
GRFConfig *c = new GRFConfig(filename.c_str() + basepath_length);
bool added = true;
@ -702,7 +705,7 @@ void DoScanNewGRFFiles(NewGRFScanCallback *callback)
/* Yes... these are the NewGRF windows */
InvalidateWindowClassesData(WC_SAVELOAD, 0, true);
InvalidateWindowData(WC_GAME_OPTIONS, WN_GAME_OPTIONS_NEWGRF_STATE, GOID_NEWGRF_RESCANNED, true);
if (callback != nullptr) callback->OnNewGRFsScanned();
if (!_exit_game && callback != nullptr) callback->OnNewGRFsScanned();
DeleteWindowByClass(WC_MODAL_PROGRESS);
SetModalProgress(false);

View File

@ -1469,6 +1469,8 @@ void GameLoop()
ScanNewGRFFiles(_request_newgrf_scan_callback);
_request_newgrf_scan = false;
_request_newgrf_scan_callback = nullptr;
/* In case someone closed the game during our scan, don't do anything else. */
if (_exit_game) return;
}
ProcessAsyncSaveFinish();