Added the hint SDL_HINT_JOYSTICK_WGI to control whether to use Windows.Gaming.Input for controllers

This commit is contained in:
Sam Lantinga 2023-07-08 09:32:24 -07:00
parent e16a83d393
commit a6228e7aaf
4 changed files with 28 additions and 4 deletions

View file

@ -1,6 +1,13 @@
This is a list of major changes in SDL's version history. This is a list of major changes in SDL's version history.
---------------------------------------------------------------------------
2.28.2:
---------------------------------------------------------------------------
General:
* Added the hint SDL_HINT_JOYSTICK_WGI to control whether to use Windows.Gaming.Input for controllers
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
2.28.0: 2.28.0:
--------------------------------------------------------------------------- ---------------------------------------------------------------------------

View file

@ -1007,6 +1007,15 @@ extern "C" {
*/ */
#define SDL_HINT_JOYSTICK_THREAD "SDL_JOYSTICK_THREAD" #define SDL_HINT_JOYSTICK_THREAD "SDL_JOYSTICK_THREAD"
/**
* \brief A variable controlling whether Windows.Gaming.Input should be used for controller handling.
*
* This variable can be set to the following values:
* "0" - WGI is not used
* "1" - WGI is used (the default)
*/
#define SDL_HINT_JOYSTICK_WGI "SDL_JOYSTICK_WGI"
/** /**
* \brief Determines whether SDL enforces that DRM master is required in order * \brief Determines whether SDL enforces that DRM master is required in order
* to initialize the KMSDRM video backend. * to initialize the KMSDRM video backend.

View file

@ -564,6 +564,10 @@ static void RAWINPUT_UpdateWindowsGamingInput()
} }
static void RAWINPUT_InitWindowsGamingInput(RAWINPUT_DeviceContext *ctx) static void RAWINPUT_InitWindowsGamingInput(RAWINPUT_DeviceContext *ctx)
{ {
if (!SDL_GetHintBoolean(SDL_HINT_JOYSTICK_WGI, SDL_TRUE)) {
return;
}
wgi_state.need_device_list_update = SDL_TRUE; wgi_state.need_device_list_update = SDL_TRUE;
wgi_state.ref_count++; wgi_state.ref_count++;
if (!wgi_state.initialized) { if (!wgi_state.initialized) {
@ -879,12 +883,12 @@ static int RAWINPUT_JoystickInit(void)
{ {
SDL_assert(!SDL_RAWINPUT_inited); SDL_assert(!SDL_RAWINPUT_inited);
if (!WIN_IsWindowsVistaOrGreater()) { if (!SDL_GetHintBoolean(SDL_HINT_JOYSTICK_RAWINPUT, SDL_TRUE)) {
/* According to bug 6400, this doesn't work on Windows XP */ return 0;
return -1;
} }
if (!SDL_GetHintBoolean(SDL_HINT_JOYSTICK_RAWINPUT, SDL_TRUE)) { if (!WIN_IsWindowsVistaOrGreater()) {
/* According to bug 6400, this doesn't work on Windows XP */
return -1; return -1;
} }

View file

@ -483,6 +483,10 @@ static int WGI_JoystickInit(void)
RoGetActivationFactory_t RoGetActivationFactoryFunc = NULL; RoGetActivationFactory_t RoGetActivationFactoryFunc = NULL;
HRESULT hr; HRESULT hr;
if (!SDL_GetHintBoolean(SDL_HINT_JOYSTICK_WGI, SDL_TRUE)) {
return 0;
}
if (FAILED(WIN_RoInitialize())) { if (FAILED(WIN_RoInitialize())) {
return SDL_SetError("RoInitialize() failed"); return SDL_SetError("RoInitialize() failed");
} }