(Savegames now get loaded after GMM dialogue execution. This avoids mouse cursor glitches (e.g. mouse cursors which get changed during loadGameState() being popped when the dialogue closes).
This commit is contained in:
athrxx 2011-06-25 15:41:58 +02:00
parent 5a2bc12f26
commit 1a05efa8ed
3 changed files with 39 additions and 7 deletions

View file

@ -96,6 +96,7 @@ Engine::Engine(OSystem *syst)
_targetName(ConfMan.getActiveDomainName()),
_pauseLevel(0),
_pauseStartTime(0),
_saveSlotToLoad(-1),
_engineStartTime(_system->getMillis()),
_mainMenuDialog(NULL) {
@ -396,7 +397,22 @@ void Engine::pauseEngineIntern(bool pause) {
void Engine::openMainMenuDialog() {
if (!_mainMenuDialog)
_mainMenuDialog = new MainMenuDialog(this);
setGameToLoadSlot(-1);
runDialog(*_mainMenuDialog);
// Load savegame after main menu execution
// (not from inside the menu loop to avoid
// mouse cursor glitches and simliar bugs,
// e.g. #2822778).
// FIXME: For now we just ignore the return
// value, which is quite bad since it could
// be a fatal loading error, which renders
// the engine unusable.
if (_saveSlotToLoad > 0)
loadGameState(_saveSlotToLoad);
syncSoundSettings();
}
@ -437,6 +453,10 @@ int Engine::runDialog(GUI::Dialog &dialog) {
return result;
}
void Engine::setGameToLoadSlot(int slot) {
_saveSlotToLoad = slot;
}
void Engine::syncSoundSettings() {
// Sync the engine with the config manager
int soundVolumeMusic = ConfMan.getInt("music_volume");