Merge pull request #8655 from Techjar/fix-hotkey-groups

Core/HotkeyManager: Fix group names in config
This commit is contained in:
Léo Lam 2020-03-18 12:03:07 +01:00 committed by GitHub
commit 4711b76cc4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 49 additions and 3 deletions

View File

@ -176,6 +176,11 @@ bool IniFile::DeleteSection(std::string_view section_name)
return false; return false;
} }
bool IniFile::Exists(std::string_view section_name) const
{
return GetSection(section_name) != nullptr;
}
bool IniFile::Exists(std::string_view section_name, std::string_view key) const bool IniFile::Exists(std::string_view section_name, std::string_view key) const
{ {
const Section* section = GetSection(section_name); const Section* section = GetSection(section_name);

View File

@ -119,6 +119,7 @@ public:
bool Save(const std::string& filename); bool Save(const std::string& filename);
bool Exists(std::string_view section_name) const;
// Returns true if key exists in section // Returns true if key exists in section
bool Exists(std::string_view section_name, std::string_view key) const; bool Exists(std::string_view section_name, std::string_view key) const;

View File

@ -13,6 +13,8 @@
#include "Common/Common.h" #include "Common/Common.h"
#include "Common/CommonTypes.h" #include "Common/CommonTypes.h"
#include "Common/FileUtil.h"
#include "Common/IniFile.h"
#include "Common/StringUtil.h" #include "Common/StringUtil.h"
#include "InputCommon/ControllerEmu/Control/Input.h" #include "InputCommon/ControllerEmu/Control/Input.h"
@ -238,6 +240,43 @@ bool IsPressed(int id, bool held)
return false; 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() void Initialize()
{ {
if (s_config.ControllersNeedToBeCreated()) if (s_config.ControllersNeedToBeCreated())
@ -246,7 +285,7 @@ void Initialize()
s_config.RegisterHotplugCallback(); s_config.RegisterHotplugCallback();
// load the saved controller config // load the saved controller config
s_config.LoadConfig(true); LoadConfig();
s_hotkey_down = {}; s_hotkey_down = {};
@ -256,6 +295,7 @@ void Initialize()
void LoadConfig() void LoadConfig()
{ {
s_config.LoadConfig(true); s_config.LoadConfig(true);
LoadLegacyConfig(s_config.GetController(0));
} }
ControllerEmu::ControlGroup* GetHotkeyGroup(HotkeyGroup group) ControllerEmu::ControlGroup* GetHotkeyGroup(HotkeyGroup group)
@ -307,7 +347,7 @@ HotkeyManager::HotkeyManager()
for (std::size_t group = 0; group < m_hotkey_groups.size(); group++) for (std::size_t group = 0; group < m_hotkey_groups.size(); group++)
{ {
m_hotkey_groups[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]); groups.emplace_back(m_hotkey_groups[group]);
for (int key = s_groups_info[group].first; key <= s_groups_info[group].last; key++) for (int key = s_groups_info[group].first; key <= s_groups_info[group].last; key++)
{ {
@ -322,7 +362,7 @@ HotkeyManager::~HotkeyManager()
std::string HotkeyManager::GetName() const std::string HotkeyManager::GetName() const
{ {
return std::string("Hotkeys") + char('1' + 0); return "Hotkeys";
} }
void HotkeyManager::GetInput(HotkeyStatus* const kb) void HotkeyManager::GetInput(HotkeyStatus* const kb)