diff --git a/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.cpp b/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.cpp index 1537a5db83..b091b3c0e4 100644 --- a/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.cpp +++ b/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.cpp @@ -26,11 +26,23 @@ ControllerGlobalSettingsWidget::ControllerGlobalSettingsWidget(QWidget* parent, #ifdef _WIN32 SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.enableSDLRawInput, "InputSources", "SDLRawInput", false); #else - m_ui.gridLayout_2->removeWidget(m_ui.enableSDLRawInput); + m_ui.sdlGridLayout->removeWidget(m_ui.enableSDLRawInput); m_ui.enableSDLRawInput->deleteLater(); m_ui.enableSDLRawInput = nullptr; #endif +#ifdef __APPLE__ + SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.enableSDLIOKitDriver, "InputSources", "SDLIOKitDriver", true); + SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.enableSDLMFIDriver, "InputSources", "SDLMFIDriver", true); +#else + m_ui.sdlGridLayout->removeWidget(m_ui.enableSDLIOKitDriver); + m_ui.enableSDLIOKitDriver->deleteLater(); + m_ui.enableSDLIOKitDriver = nullptr; + m_ui.sdlGridLayout->removeWidget(m_ui.enableSDLMFIDriver); + m_ui.enableSDLMFIDriver->deleteLater(); + m_ui.enableSDLMFIDriver = nullptr; +#endif + ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.enableMouseMapping, "UI", "EnableMouseMapping", false); connect(m_ui.mouseSettings, &QToolButton::clicked, this, &ControllerGlobalSettingsWidget::mouseSettingsClicked); @@ -103,6 +115,10 @@ void ControllerGlobalSettingsWidget::updateSDLOptionsEnabled() #ifdef _WIN32 m_ui.enableSDLRawInput->setEnabled(enabled); #endif +#ifdef __APPLE__ + m_ui.enableSDLIOKitDriver->setEnabled(enabled); + m_ui.enableSDLMFIDriver->setEnabled(enabled); +#endif } void ControllerGlobalSettingsWidget::ledSettingsClicked() diff --git a/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.ui b/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.ui index 9a3f7dc4ae..d3fccc41d6 100644 --- a/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.ui +++ b/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.ui @@ -126,7 +126,7 @@ SDL Input Source - + @@ -173,6 +173,20 @@ + + + + Enable IOKit Driver + + + + + + + Enable MFI Driver + + + diff --git a/pcsx2/Input/SDLInputSource.cpp b/pcsx2/Input/SDLInputSource.cpp index 774c32dcdd..5e0cfd6756 100644 --- a/pcsx2/Input/SDLInputSource.cpp +++ b/pcsx2/Input/SDLInputSource.cpp @@ -160,9 +160,23 @@ void SDLInputSource::UpdateSettings(SettingsInterface& si, std::unique_lockgame_controller, color); } + + m_sdl_hints = si.GetKeyValueList("SDLHints"); + + m_controller_enhanced_mode = si.GetBoolValue("InputSources", "SDLControllerEnhancedMode", false); + m_controller_raw_mode = si.GetBoolValue("InputSources", "SDLRawInput", false); + +#ifdef __APPLE__ + m_enable_iokit_driver = si.GetBoolValue("InputSources", "SDLIOKitDriver", true); + m_enable_mfi_driver = si.GetBoolValue("InputSources", "SDLMFIDriver", true); +#endif } u32 SDLInputSource::GetRGBForPlayerId(SettingsInterface& si, u32 player_id) @@ -252,6 +272,12 @@ void SDLInputSource::SetHints() SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_PS3, "1"); #endif +#ifdef __APPLE__ + Console.WriteLnFmt("IOKit is {}, MFI is {}.", m_enable_iokit_driver ? "enabled" : "disabled", m_enable_mfi_driver ? "enabled" : "disabled"); + SDL_SetHint(SDL_HINT_JOYSTICK_IOKIT, m_enable_iokit_driver ? "1" : "0"); + SDL_SetHint(SDL_HINT_JOYSTICK_MFI, m_enable_mfi_driver ? "1" : "0"); +#endif + for (const std::pair& hint : m_sdl_hints) SDL_SetHint(hint.first.c_str(), hint.second.c_str()); } diff --git a/pcsx2/Input/SDLInputSource.h b/pcsx2/Input/SDLInputSource.h index 34552ebd07..ed2412255d 100644 --- a/pcsx2/Input/SDLInputSource.h +++ b/pcsx2/Input/SDLInputSource.h @@ -2,8 +2,11 @@ // SPDX-License-Identifier: LGPL-3.0+ #pragma once + #include "Input/InputSource.h" -#include "SDL.h" + +#include + #include #include #include @@ -84,9 +87,15 @@ private: ControllerDataVector m_controllers; + std::array m_led_colors{}; + std::vector> m_sdl_hints; + bool m_sdl_subsystem_initialized = false; bool m_controller_enhanced_mode = false; bool m_controller_raw_mode = false; - std::array m_led_colors{}; - std::vector> m_sdl_hints; + +#ifdef __APPLE__ + bool m_enable_iokit_driver = false; + bool m_enable_mfi_driver = false; +#endif };