diff options
author | Thierry Crozat | 2017-11-24 22:21:44 +0000 |
---|---|---|
committer | Thierry Crozat | 2017-11-24 22:44:41 +0000 |
commit | 469e75cb64c4acd2914ec845915637e9144b159a (patch) | |
tree | 53672bab789c2259590d107a4c37b88613419b0a | |
parent | 150f70f94c3d8cf762ca564ac6c05fa52c62f9a8 (diff) | |
download | scummvm-rg350-469e75cb64c4acd2914ec845915637e9144b159a.tar.gz scummvm-rg350-469e75cb64c4acd2914ec845915637e9144b159a.tar.bz2 scummvm-rg350-469e75cb64c4acd2914ec845915637e9144b159a.zip |
GUI: Fix incorrect SaveLoad dialog state after updating the save list
Updating the list reset the selection in the list widget, however if
a save had previously been selected and the Choose button was enabled,
it remained enabled despite no save being selected. Trying to load
the game resulted in a crash. This was particularly an issue with
cloud enabled as if you are unlucky you could have tried to load a
save just as the cloud sync finished, which updated the list and
unselected the save. This change fixes bug #9766: Assert in
SaveLoadChooser dialog.
In addition to adding a sanity check on the selected index for the
Choose command, this commit also preserves the selection when
updating the list as I think this would be the expected behaviour
in this dialog.
-rw-r--r-- | gui/saveload-dialog.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/gui/saveload-dialog.cpp b/gui/saveload-dialog.cpp index 4bf23b8974..cbfaaed8dd 100644 --- a/gui/saveload-dialog.cpp +++ b/gui/saveload-dialog.cpp @@ -428,11 +428,13 @@ void SaveLoadChooserSimple::handleCommand(CommandSender *sender, uint32 cmd, uin break; case kChooseCmd: _list->endEditMode(); - if (!_saveList.empty()) { - setResult(_saveList[selItem].getSaveSlot()); - _resultString = _list->getSelectedString(); + if (selItem >= 0) { + if (!_saveList.empty()) { + setResult(_saveList[selItem].getSaveSlot()); + _resultString = _list->getSelectedString(); + } + close(); } - close(); break; case kListSelectionChangedCmd: updateSelection(true); @@ -694,7 +696,13 @@ void SaveLoadChooserSimple::updateSaveList() { colors.push_back(ThemeEngine::kFontColorNormal); } + int selected = _list->getSelected(); _list->setList(saveNames, &colors); + if (selected >= 0 && selected < saveNames.size()) + _list->setSelected(selected); + else + _chooseButton->setEnabled(false); + draw(); } |