Jelajahi Sumber

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.
Sam Lantinga 4 tahun lalu
induk
melakukan
09b7ca27d6
1 mengubah file dengan 18 tambahan dan 0 penghapusan
  1. 18 0
      src/joystick/windows/SDL_windows_gaming_input.c

+ 18 - 0
src/joystick/windows/SDL_windows_gaming_input.c

@@ -532,6 +532,24 @@ WGI_JoystickInit(void)
         if (!SUCCEEDED(hr)) {
         if (!SUCCEEDED(hr)) {
             SDL_SetError("add_RawGameControllerRemoved() failed: 0x%lx\n", 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;
     return 0;