diff --git a/Source/Core/Core/Config/MainSettings.cpp b/Source/Core/Core/Config/MainSettings.cpp index 21c453b6c7..48d3446512 100644 --- a/Source/Core/Core/Config/MainSettings.cpp +++ b/Source/Core/Core/Config/MainSettings.cpp @@ -186,6 +186,8 @@ const Info MAIN_WIIMOTE_CONTINUOUS_SCANNING{ const Info MAIN_WIIMOTE_ENABLE_SPEAKER{{System::Main, "Core", "WiimoteEnableSpeaker"}, false}; const Info MAIN_CONNECT_WIIMOTES_FOR_CONTROLLER_INTERFACE{ {System::Main, "Core", "WiimoteControllerInterface"}, false}; +const Info MAIN_USE_GC_ADAPTER_FOR_CONTROLLER_INTERFACE{ + {System::Main, "Core", "GCAdapterControllerInterface"}, false}; const Info MAIN_MMU{{System::Main, "Core", "MMU"}, false}; const Info MAIN_PAUSE_ON_PANIC{{System::Main, "Core", "PauseOnPanic"}, false}; const Info MAIN_BB_DUMP_PORT{{System::Main, "Core", "BBDumpPort"}, -1}; diff --git a/Source/Core/Core/Config/MainSettings.h b/Source/Core/Core/Config/MainSettings.h index dddda8ae7a..d627599de3 100644 --- a/Source/Core/Core/Config/MainSettings.h +++ b/Source/Core/Core/Config/MainSettings.h @@ -106,6 +106,7 @@ extern const Info MAIN_WII_KEYBOARD; extern const Info MAIN_WIIMOTE_CONTINUOUS_SCANNING; extern const Info MAIN_WIIMOTE_ENABLE_SPEAKER; extern const Info MAIN_CONNECT_WIIMOTES_FOR_CONTROLLER_INTERFACE; +extern const Info MAIN_USE_GC_ADAPTER_FOR_CONTROLLER_INTERFACE; extern const Info MAIN_MMU; extern const Info MAIN_PAUSE_ON_PANIC; extern const Info MAIN_BB_DUMP_PORT; diff --git a/Source/Core/DolphinQt/Config/GamecubeControllersWidget.cpp b/Source/Core/DolphinQt/Config/GamecubeControllersWidget.cpp index 2d2474ac4c..7ac61de8df 100644 --- a/Source/Core/DolphinQt/Config/GamecubeControllersWidget.cpp +++ b/Source/Core/DolphinQt/Config/GamecubeControllersWidget.cpp @@ -3,6 +3,7 @@ #include "DolphinQt/Config/GamecubeControllersWidget.h" +#include #include #include #include @@ -95,6 +96,10 @@ void GamecubeControllersWidget::CreateLayout() m_gc_layout->addWidget(gc_box, controller_row, 1); m_gc_layout->addWidget(gc_button, controller_row, 2); } + + m_gcpad_ciface = new QCheckBox(tr("Use Wii-U Adapter for Emulated Controllers")); + m_gc_layout->addWidget(m_gcpad_ciface, m_gc_layout->rowCount(), 0, 1, -1); + m_gc_box->setLayout(m_gc_layout); auto* layout = new QVBoxLayout; @@ -114,6 +119,8 @@ void GamecubeControllersWidget::ConnectWidgets() }); connect(m_gc_buttons[i], &QPushButton::clicked, this, [this, i] { OnGCPadConfigure(i); }); } + + connect(m_gcpad_ciface, &QCheckBox::toggled, this, &GamecubeControllersWidget::SaveSettings); } void GamecubeControllersWidget::OnGCTypeChanged(size_t index) @@ -184,6 +191,9 @@ void GamecubeControllersWidget::LoadSettings(Core::State state) OnGCTypeChanged(i); } } + + SignalBlocking(m_gcpad_ciface) + ->setChecked(Config::Get(Config::MAIN_USE_GC_ADAPTER_FOR_CONTROLLER_INTERFACE)); } void GamecubeControllersWidget::SaveSettings() @@ -203,11 +213,15 @@ void GamecubeControllersWidget::SaveSettings() static_cast(i)); } } + + Config::SetBaseOrCurrent(Config::MAIN_USE_GC_ADAPTER_FOR_CONTROLLER_INTERFACE, + m_gcpad_ciface->isChecked()); } + + SConfig::GetInstance().SaveSettings(); + if (GCAdapter::UseAdapter()) GCAdapter::StartScanThread(); else GCAdapter::StopScanThread(); - - SConfig::GetInstance().SaveSettings(); } diff --git a/Source/Core/DolphinQt/Config/GamecubeControllersWidget.h b/Source/Core/DolphinQt/Config/GamecubeControllersWidget.h index f4d1b69f60..385ab7c947 100644 --- a/Source/Core/DolphinQt/Config/GamecubeControllersWidget.h +++ b/Source/Core/DolphinQt/Config/GamecubeControllersWidget.h @@ -7,6 +7,7 @@ #include +class QCheckBox; class QComboBox; class QHBoxLayout; class QGridLayout; @@ -40,4 +41,5 @@ private: std::array m_gc_controller_boxes; std::array m_gc_buttons; std::array m_gc_groups; + QCheckBox* m_gcpad_ciface; }; diff --git a/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp b/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp index 096ac0b5d9..cf3864b46d 100644 --- a/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp +++ b/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp @@ -87,6 +87,7 @@ void ControllerInterface::Initialize(const WindowSystemInfo& wsi) m_input_backends.emplace_back(ciface::SteamDeck::CreateInputBackend(this)); #endif + // TODO: obey Config::Get(Config::MAIN_USE_GC_ADAPTER_FOR_CONTROLLER_INTERFACE) m_input_backends.emplace_back(ciface::WiiUAdapter::CreateInputBackend(this)); // Don't allow backends to add devices before the first RefreshDevices() as they will be cleaned diff --git a/Source/Core/InputCommon/GCAdapter.cpp b/Source/Core/InputCommon/GCAdapter.cpp index 424f30703d..a2490306cf 100644 --- a/Source/Core/InputCommon/GCAdapter.cpp +++ b/Source/Core/InputCommon/GCAdapter.cpp @@ -415,12 +415,14 @@ void SetAdapterCallback(std::function func) static void RefreshConfig() { - s_is_adapter_wanted = false; + s_is_adapter_wanted = Config::Get(Config::MAIN_USE_GC_ADAPTER_FOR_CONTROLLER_INTERFACE); for (int i = 0; i < SerialInterface::MAX_SI_CHANNELS; ++i) { s_is_adapter_wanted |= Config::Get(Config::GetInfoForSIDevice(i)) == SerialInterface::SIDevices::SIDEVICE_WIIU_ADAPTER; + + // TODO: ControllerInterface shouldn't obey this setting. s_config_rumble_enabled[i] = Config::Get(Config::GetInfoForAdapterRumble(i)); } }