From 09b7ca27d6af5b897052d93d9cba78e09393ec97 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sat, 27 Nov 2021 10:53:20 -0800 Subject: [PATCH] Get the current WGI controller list at startup On Win32 this list is empty and we always get controller added events. On UWP, this list is populated and we don't get controlle added events for currently connected controllers. --- .../windows/SDL_windows_gaming_input.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/joystick/windows/SDL_windows_gaming_input.c b/src/joystick/windows/SDL_windows_gaming_input.c index acf53009e74e5..226d6ff11b864 100644 --- a/src/joystick/windows/SDL_windows_gaming_input.c +++ b/src/joystick/windows/SDL_windows_gaming_input.c @@ -532,6 +532,24 @@ WGI_JoystickInit(void) if (!SUCCEEDED(hr)) { SDL_SetError("add_RawGameControllerRemoved() failed: 0x%lx\n", hr); } + + __FIVectorView_1_Windows__CGaming__CInput__CRawGameController *controllers; + hr = __x_ABI_CWindows_CGaming_CInput_CIRawGameControllerStatics_get_RawGameControllers(wgi.statics, &controllers); + if (SUCCEEDED(hr)) { + unsigned i, count = 0; + + hr = __FIVectorView_1_Windows__CGaming__CInput__CRawGameController_get_Size(controllers, &count); + if (SUCCEEDED(hr)) { + for (i = 0; i < count; ++i) { + __x_ABI_CWindows_CGaming_CInput_CIRawGameController *e = NULL; + + hr = __FIVectorView_1_Windows__CGaming__CInput__CRawGameController_GetAt(controllers, i, &e); + if (SUCCEEDED(hr) && e) { + IEventHandler_CRawGameControllerVtbl_InvokeAdded(&controller_added, (IInspectable *)controllers, e); + } + } + } + } } return 0;