diff --git a/src/common/settings_setting.h b/src/common/settings_setting.h index a7e6bb6168..1d3aedab81 100644 --- a/src/common/settings_setting.h +++ b/src/common/settings_setting.h @@ -192,15 +192,13 @@ public: if constexpr (std::is_same_v) { this->SetValue(input); } else if constexpr (std::is_same_v>) { - this->SetValue(static_cast(std::stoul(input))); + this->SetValue(u32(std::stoul(input))); } else if constexpr (std::is_same_v) { this->SetValue(input == "true"); } else if constexpr (std::is_same_v) { this->SetValue(std::stof(input)); - } else if constexpr (std::is_same_v) { - this->SetValue(ToEnum(input)); } else { - this->SetValue(static_cast(std::stoll(input))); + this->SetValue(Type(std::stoll(input))); } } catch (std::invalid_argument&) { this->SetValue(this->GetDefault()); diff --git a/src/frontend_common/config.cpp b/src/frontend_common/config.cpp index fa1383436e..b18cf6fa4a 100644 --- a/src/frontend_common/config.cpp +++ b/src/frontend_common/config.cpp @@ -1,23 +1,19 @@ // SPDX-FileCopyrightText: 2023 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later -#include -#include +#include "config.h" #include "common/fs/fs.h" #include "common/fs/path_util.h" #include "common/logging/log.h" #include "common/settings.h" #include "common/settings_common.h" #include "common/settings_enums.h" -#include "config.h" -#include "core/core.h" -#include "core/hle/service/acc/profile_manager.h" -#include "hid_core/resources/npad/npad.h" -#include "network/network.h" +#include +#include #include -#include "common/string_util.h" +#include "common/assert.h" namespace FS = Common::FS; @@ -926,8 +922,7 @@ void Config::ReadSettingGeneric(Settings::BasicSetting* const setting) { const bool is_default = ReadBooleanSetting(std::string(key).append("\\default"), std::make_optional(true)); if (!is_default) { - const std::string setting_string = ReadStringSetting(key, default_value); - setting->LoadString(setting_string); + setting->LoadString(ReadStringSetting(key, default_value)); } else { // Empty string resets the Setting to default setting->LoadString(""); diff --git a/src/yuzu/configuration/configure_audio.cpp b/src/yuzu/configuration/configure_audio.cpp index 9d21759240..d25bfe398a 100644 --- a/src/yuzu/configuration/configure_audio.cpp +++ b/src/yuzu/configuration/configure_audio.cpp @@ -186,16 +186,23 @@ void ConfigureAudio::SetConfiguration() { void ConfigureAudio::SetOutputSinkFromSinkID() { [[maybe_unused]] const QSignalBlocker blocker(sink_combo_box); - int new_sink_index = 0; - const QString sink_id = QString::fromStdString(Settings::values.sink_id.ToString()); - for (int index = 0; index < sink_combo_box->count(); index++) { - if (sink_combo_box->itemText(index) == sink_id) { - new_sink_index = index; - break; + const std::string new_sink_id = []() -> const std::string { + const Settings::AudioEngine sink_id = Settings::values.sink_id.GetValue(); + const auto canonicalizations + = Settings::EnumMetadata::Canonicalizations(); + + for (u32 i = 0; i < canonicalizations.size(); ++i) { + const Settings::AudioEngine value = canonicalizations[i].second; + const std::string_view key = canonicalizations[i].first; + + if (sink_id == value) + return std::string(key); } - } - sink_combo_box->setCurrentIndex(new_sink_index); + return std::string("null"); + }(); + + sink_combo_box->setCurrentText(QString::fromStdString(new_sink_id)); } void ConfigureAudio::SetOutputDevicesFromDeviceID() { @@ -233,8 +240,21 @@ void ConfigureAudio::ApplyConfiguration() { apply_func(is_powered_on); } - Settings::values.sink_id.LoadString( - sink_combo_box->itemText(sink_combo_box->currentIndex()).toStdString()); + const u32 new_sink_id = [this]() { + u32 new_sink_id = 0; + const std::string sink_id = sink_combo_box->currentText().toStdString(); + const auto canonicalizations + = Settings::EnumMetadata::Canonicalizations(); + + for (u32 i = 0; i < canonicalizations.size(); ++i) { + if (sink_id == canonicalizations[i].first) + return i; + } + + return u32(0); + }(); + + Settings::values.sink_id.SetValue(Settings::AudioEngine(new_sink_id)); Settings::values.audio_output_device_id.SetValue( output_device_combo_box->itemText(output_device_combo_box->currentIndex()).toStdString()); Settings::values.audio_input_device_id.SetValue(