Skip to content

Commit

Permalink
Core/HotkeyManager: Fix group names in config
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Techjar committed Mar 17, 2020
1 parent 08c9588 commit ae0c918
Showing 1 changed file with 43 additions and 3 deletions.
46 changes: 43 additions & 3 deletions Source/Core/Core/HotkeyManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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())
Expand All @@ -245,7 +284,7 @@ void Initialize()
s_config.RegisterHotplugCallback();

// load the saved controller config
s_config.LoadConfig(true);
LoadConfig();

s_hotkey_down = {};

Expand All @@ -255,6 +294,7 @@ void Initialize()
void LoadConfig()
{
s_config.LoadConfig(true);
LoadLegacyConfig(s_config.GetController(0));
}

ControllerEmu::ControlGroup* GetHotkeyGroup(HotkeyGroup group)
Expand Down Expand Up @@ -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++)
{
Expand All @@ -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)
Expand Down

0 comments on commit ae0c918

Please sign in to comment.