mirror of
https://github.com/OpenMW/openmw.git
synced 2025-10-18 12:16:41 +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();
|
updateShowingPages();
|
||||||
|
|
||||||
mSelectedQuest = 0;
|
if (Settings::gui().mControllerMenus)
|
||||||
|
setControllerFocusedQuest(0);
|
||||||
|
|
||||||
MWBase::Environment::get().getWindowManager()->setKeyFocusWidget(getWidget<MyGUI::Widget>(CloseBTN));
|
MWBase::Environment::get().getWindowManager()->setKeyFocusWidget(getWidget<MyGUI::Widget>(CloseBTN));
|
||||||
}
|
}
|
||||||
|
@ -524,7 +525,7 @@ namespace
|
||||||
|
|
||||||
if (Settings::gui().mControllerMenus)
|
if (Settings::gui().mControllerMenus)
|
||||||
{
|
{
|
||||||
mSelectedQuest = 0;
|
setControllerFocusedQuest(0);
|
||||||
addControllerButtons(list, mSelectedQuest);
|
addControllerButtons(list, mSelectedQuest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -823,21 +824,7 @@ namespace
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// Scroll through the list of quests or topics
|
// Scroll through the list of quests or topics
|
||||||
mButtons[mSelectedQuest]->setTextColour(MyGUI::Colour::Black);
|
setControllerFocusedQuest(MWGui::wrap(mSelectedQuest - 1, mButtons.size()));
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (mOptionsMode)
|
else if (mOptionsMode)
|
||||||
{
|
{
|
||||||
|
@ -877,21 +864,7 @@ namespace
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// Scroll through the list of quests or topics
|
// Scroll through the list of quests or topics
|
||||||
mButtons[mSelectedQuest]->setTextColour(MyGUI::Colour::Black);
|
setControllerFocusedQuest(MWGui::wrap(mSelectedQuest + 1, mButtons.size()));
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (mOptionsMode)
|
else if (mOptionsMode)
|
||||||
{
|
{
|
||||||
|
@ -982,6 +955,31 @@ namespace
|
||||||
|
|
||||||
return false;
|
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 mSelectedQuest = 0;
|
||||||
int mSelectedIndex = 0;
|
int mSelectedIndex = 0;
|
||||||
void setIndexControllerFocus(int index, bool focused);
|
void setIndexControllerFocus(int index, bool focused);
|
||||||
|
void setControllerFocusedQuest(int index);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1407,6 +1407,8 @@ namespace MWGui
|
||||||
|
|
||||||
if (Settings::gui().mControllerMenus)
|
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.
|
// Activate first visible window. This needs to be called after updateVisible.
|
||||||
mActiveControllerWindows[mode] = std::max(mActiveControllerWindows[mode] - 1, -1);
|
mActiveControllerWindows[mode] = std::max(mActiveControllerWindows[mode] - 1, -1);
|
||||||
cycleActiveControllerWindow(true);
|
cycleActiveControllerWindow(true);
|
||||||
|
|
Loading…
Reference in a new issue