From d94235e3a727bcec1d800cd4184bd70da142d306 Mon Sep 17 00:00:00 2001
From: scrawl <720642+scrawl@users.noreply.github.com>
Date: Wed, 4 Oct 2017 17:47:42 +0200
Subject: [PATCH] Update the saves list/preview image when character selection
 changes to make it more convenient to flip through characters with the
 keyboard

---
 apps/openmw/mwgui/savegamedialog.cpp | 13 ++++++++++---
 apps/openmw/mwgui/savegamedialog.hpp |  1 +
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/apps/openmw/mwgui/savegamedialog.cpp b/apps/openmw/mwgui/savegamedialog.cpp
index 423dbb0360..6a290bef1b 100644
--- a/apps/openmw/mwgui/savegamedialog.cpp
+++ b/apps/openmw/mwgui/savegamedialog.cpp
@@ -50,7 +50,8 @@ namespace MWGui
         mOkButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SaveGameDialog::onOkButtonClicked);
         mCancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SaveGameDialog::onCancelButtonClicked);
         mDeleteButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SaveGameDialog::onDeleteButtonClicked);
-        mCharacterSelection->eventComboAccept += MyGUI::newDelegate(this, &SaveGameDialog::onCharacterSelected);
+        mCharacterSelection->eventComboChangePosition += MyGUI::newDelegate(this, &SaveGameDialog::onCharacterSelected);
+        mCharacterSelection->eventComboAccept += MyGUI::newDelegate(this, &SaveGameDialog::onCharacterAccept);
         mSaveList->eventListChangePosition += MyGUI::newDelegate(this, &SaveGameDialog::onSlotSelected);
         mSaveList->eventListMouseItemActivate += MyGUI::newDelegate(this, &SaveGameDialog::onSlotMouseClick);
         mSaveList->eventListSelectAccept += MyGUI::newDelegate(this, &SaveGameDialog::onSlotActivated);
@@ -132,6 +133,8 @@ namespace MWGui
         mSaveNameEdit->setCaption ("");
         if (mSaving)
             MWBase::Environment::get().getWindowManager()->setKeyFocusWidget(mSaveNameEdit);
+        else
+            MWBase::Environment::get().getWindowManager()->setKeyFocusWidget(mSaveList);
 
         center();
 
@@ -322,6 +325,12 @@ namespace MWGui
         fillSaveList();
     }
 
+    void SaveGameDialog::onCharacterAccept(MyGUI::ComboBox* sender, size_t pos)
+    {
+        // Give key focus to save list so we can confirm the selection with Enter
+        MWBase::Environment::get().getWindowManager()->setKeyFocusWidget(mSaveList);
+    }
+
     void SaveGameDialog::fillSaveList()
     {
         mSaveList->removeAllItems();
@@ -336,8 +345,6 @@ namespace MWGui
         {
             mSaveList->setIndexSelected(0);
             onSlotSelected(mSaveList, 0);
-            // Give key focus to save list so we can confirm the selection with Enter
-            MWBase::Environment::get().getWindowManager()->setKeyFocusWidget(mSaveList);
         }
         else
             onSlotSelected(mSaveList, MyGUI::ITEM_NONE);
diff --git a/apps/openmw/mwgui/savegamedialog.hpp b/apps/openmw/mwgui/savegamedialog.hpp
index a51124705b..0a87b6600d 100644
--- a/apps/openmw/mwgui/savegamedialog.hpp
+++ b/apps/openmw/mwgui/savegamedialog.hpp
@@ -29,6 +29,7 @@ namespace MWGui
         void onOkButtonClicked (MyGUI::Widget* sender);
         void onDeleteButtonClicked (MyGUI::Widget* sender);
         void onCharacterSelected (MyGUI::ComboBox* sender, size_t pos);
+        void onCharacterAccept(MyGUI::ComboBox* sender, size_t pos);
         // Slot selected (mouse click or arrow keys)
         void onSlotSelected (MyGUI::ListBox* sender, size_t pos);
         // Slot activated (double click or enter key)