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:
parent
5777a3cc3f
commit
88b43cabec
3 changed files with 33 additions and 32 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -36,6 +36,7 @@ namespace MWGui
|
|||
int mSelectedQuest = 0;
|
||||
int mSelectedIndex = 0;
|
||||
void setIndexControllerFocus(int index, bool focused);
|
||||
void setControllerFocusedQuest(int index);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue