1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-10-17 03:16:34 +00:00

Reset controller focus when reopening container and quest menus

This commit is contained in:
Andrew Lanzone 2025-06-22 14:47:54 -07:00
parent 5777a3cc3f
commit 88b43cabec
3 changed files with 33 additions and 32 deletions

View file

@ -252,7 +252,8 @@ namespace
}
updateShowingPages();
mSelectedQuest = 0;
if (Settings::gui().mControllerMenus)
setControllerFocusedQuest(0);
MWBase::Environment::get().getWindowManager()->setKeyFocusWidget(getWidget<MyGUI::Widget>(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<Gui::MWList>(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<Gui::MWList>(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<int>(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<Gui::MWList>(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);
}
}
}
};
}

View file

@ -36,6 +36,7 @@ namespace MWGui
int mSelectedQuest = 0;
int mSelectedIndex = 0;
void setIndexControllerFocus(int index, bool focused);
void setControllerFocusedQuest(int index);
};
}

View file

@ -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);