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;
}
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
{
const Section* section = GetSection(section_name);

View File

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

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"
@ -238,6 +240,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())
@ -246,7 +285,7 @@ void Initialize()
s_config.RegisterHotplugCallback();
// load the saved controller config
s_config.LoadConfig(true);
LoadConfig();
s_hotkey_down = {};
@ -256,6 +295,7 @@ void Initialize()
void LoadConfig()
{
s_config.LoadConfig(true);
LoadLegacyConfig(s_config.GetController(0));
}
ControllerEmu::ControlGroup* GetHotkeyGroup(HotkeyGroup group)
@ -307,7 +347,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++)
{
@ -322,7 +362,7 @@ HotkeyManager::~HotkeyManager()
std::string HotkeyManager::GetName() const
{
return std::string("Hotkeys") + char('1' + 0);
return "Hotkeys";
}
void HotkeyManager::GetInput(HotkeyStatus* const kb)