Core/HotkeyManager: Fix group names in config

For some reason every button group was shoved into the same config
group called "Keys" which caused buggy behavior once someone tried to
have hotkeys with the same name in different groups. This fixes that,
and converts existing configs to the new group names so they don't get
reset.
This commit is contained in:
Techjar 2020-02-28 23:23:42 -05:00
parent 08c95883e9
commit ae0c91805c
1 changed files with 43 additions and 3 deletions
Source/Core/Core

View File

@ -13,6 +13,8 @@
#include "Common/Common.h"
#include "Common/CommonTypes.h"
#include "Common/FileUtil.h"
#include "Common/IniFile.h"
#include "Common/StringUtil.h"
#include "InputCommon/ControllerEmu/Control/Input.h"
@ -237,6 +239,43 @@ bool IsPressed(int id, bool held)
return false;
}
// This function exists to load the old "Keys" group so pre-existing configs don't break.
// TODO: Remove this at a future date when we're confident most configs are migrated.
static void LoadLegacyConfig(ControllerEmu::EmulatedController* controller)
{
IniFile inifile;
if (inifile.Load(File::GetUserPath(D_CONFIG_IDX) + "Hotkeys.ini"))
{
if (!inifile.Exists("Hotkeys") && inifile.Exists("Hotkeys1"))
{
auto sec = inifile.GetOrCreateSection("Hotkeys1");
{
std::string defdev;
sec->Get("Device", &defdev, "");
controller->SetDefaultDevice(defdev);
}
for (auto& group : controller->groups)
{
for (auto& control : group->controls)
{
std::string key("Keys/" + control->name);
if (sec->Exists(key))
{
std::string expression;
sec->Get(key, &expression, "");
control->control_ref->SetExpression(std::move(expression));
}
}
}
controller->UpdateReferences(g_controller_interface);
}
}
}
void Initialize()
{
if (s_config.ControllersNeedToBeCreated())
@ -245,7 +284,7 @@ void Initialize()
s_config.RegisterHotplugCallback();
// load the saved controller config
s_config.LoadConfig(true);
LoadConfig();
s_hotkey_down = {};
@ -255,6 +294,7 @@ void Initialize()
void LoadConfig()
{
s_config.LoadConfig(true);
LoadLegacyConfig(s_config.GetController(0));
}
ControllerEmu::ControlGroup* GetHotkeyGroup(HotkeyGroup group)
@ -306,7 +346,7 @@ HotkeyManager::HotkeyManager()
for (std::size_t group = 0; group < m_hotkey_groups.size(); group++)
{
m_hotkey_groups[group] =
(m_keys[group] = new ControllerEmu::Buttons("Keys", s_groups_info[group].name));
(m_keys[group] = new ControllerEmu::Buttons(s_groups_info[group].name));
groups.emplace_back(m_hotkey_groups[group]);
for (int key = s_groups_info[group].first; key <= s_groups_info[group].last; key++)
{
@ -321,7 +361,7 @@ HotkeyManager::~HotkeyManager()
std::string HotkeyManager::GetName() const
{
return std::string("Hotkeys") + char('1' + 0);
return "Hotkeys";
}
void HotkeyManager::GetInput(HotkeyStatus* const kb)