diff --git a/apps/openmw/mwgui/journalwindow.cpp b/apps/openmw/mwgui/journalwindow.cpp index a661acb847..e68c7299d9 100644 --- a/apps/openmw/mwgui/journalwindow.cpp +++ b/apps/openmw/mwgui/journalwindow.cpp @@ -252,7 +252,8 @@ namespace } updateShowingPages(); - mSelectedQuest = 0; + if (Settings::gui().mControllerMenus) + setControllerFocusedQuest(0); MWBase::Environment::get().getWindowManager()->setKeyFocusWidget(getWidget(CloseBTN)); } @@ -524,7 +525,7 @@ namespace if (Settings::gui().mControllerMenus) { - mSelectedQuest = 0; + setControllerFocusedQuest(0); addControllerButtons(list, mSelectedQuest); } @@ -823,21 +824,7 @@ namespace return true; // Scroll through the list of quests or topics - mButtons[mSelectedQuest]->setTextColour(MyGUI::Colour::Black); - mSelectedQuest = MWGui::wrap(mSelectedQuest - 1, mButtons.size()); - mButtons[mSelectedQuest]->setTextColour(MWGui::journalHeaderColour); - - // Scroll the list to keep the active item in view - Gui::MWList* list = getWidget(mQuestMode ? QuestsList : TopicsList); - if (mSelectedQuest <= 3) - list->setViewOffset(0); - else - { - int offset = 0; - for (int i = 0; i < mSelectedQuest - 3; i++) - offset += mButtons[i]->getHeight() + 3; - list->setViewOffset(-offset); - } + setControllerFocusedQuest(MWGui::wrap(mSelectedQuest - 1, mButtons.size())); } else if (mOptionsMode) { @@ -877,21 +864,7 @@ namespace return true; // Scroll through the list of quests or topics - mButtons[mSelectedQuest]->setTextColour(MyGUI::Colour::Black); - mSelectedQuest = MWGui::wrap(mSelectedQuest + 1, mButtons.size()); - mButtons[mSelectedQuest]->setTextColour(MWGui::journalHeaderColour); - - // Scroll the list to keep the active item in view - Gui::MWList* list = getWidget(mQuestMode ? QuestsList : TopicsList); - if (mSelectedQuest <= 3) - list->setViewOffset(0); - else - { - int offset = 0; - for (int i = 0; i < mSelectedQuest - 3; i++) - offset += mButtons[i]->getHeight() + 3; - list->setViewOffset(-offset); - } + setControllerFocusedQuest(MWGui::wrap(mSelectedQuest + 1, mButtons.size())); } else if (mOptionsMode) { @@ -982,6 +955,31 @@ namespace return false; } + + void setControllerFocusedQuest(int index) + { + int listSize = static_cast(mButtons.size()); + if (mSelectedQuest >= 0 && mSelectedQuest < listSize) + mButtons[mSelectedQuest]->setTextColour(MyGUI::Colour::Black); + + mSelectedQuest = index; + if (mSelectedQuest >= 0 && mSelectedQuest < listSize) + { + mButtons[mSelectedQuest]->setTextColour(MWGui::journalHeaderColour); + + // Scroll the list to keep the active item in view + Gui::MWList* list = getWidget(mQuestMode ? QuestsList : TopicsList); + if (mSelectedQuest <= 3) + list->setViewOffset(0); + else + { + int offset = 0; + for (int i = 0; i < mSelectedQuest - 3; i++) + offset += mButtons[i]->getHeight() + 3; + list->setViewOffset(-offset); + } + } + } }; } diff --git a/apps/openmw/mwgui/journalwindow.hpp b/apps/openmw/mwgui/journalwindow.hpp index 3c66421906..31efa695bb 100644 --- a/apps/openmw/mwgui/journalwindow.hpp +++ b/apps/openmw/mwgui/journalwindow.hpp @@ -36,6 +36,7 @@ namespace MWGui int mSelectedQuest = 0; int mSelectedIndex = 0; void setIndexControllerFocus(int index, bool focused); + void setControllerFocusedQuest(int index); }; } diff --git a/apps/openmw/mwgui/windowmanagerimp.cpp b/apps/openmw/mwgui/windowmanagerimp.cpp index 7ab909983e..5447861ace 100644 --- a/apps/openmw/mwgui/windowmanagerimp.cpp +++ b/apps/openmw/mwgui/windowmanagerimp.cpp @@ -1407,6 +1407,8 @@ namespace MWGui if (Settings::gui().mControllerMenus) { + if (mode == GM_Container) + mActiveControllerWindows[mode] = 0; // Ensure controller focus is on container // Activate first visible window. This needs to be called after updateVisible. mActiveControllerWindows[mode] = std::max(mActiveControllerWindows[mode] - 1, -1); cycleActiveControllerWindow(true);