Rémi Bernon : dinput: Call hid_joystick_enum_device directly in EnumDevicesBySemantics.

Alexandre Julliard julliard at winehq.org
Tue Oct 26 16:19:18 CDT 2021


Module: wine
Branch: master
Commit: 5726c77faa5962504632f1e19813588dedcfc692
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=5726c77faa5962504632f1e19813588dedcfc692

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Tue Oct 26 09:17:30 2021 +0200

dinput: Call hid_joystick_enum_device directly in EnumDevicesBySemantics.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/dinput/dinput_main.c | 30 ++++++++++--------------------
 1 file changed, 10 insertions(+), 20 deletions(-)

diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c
index ffa78be2fb5..745fdafa920 100644
--- a/dlls/dinput/dinput_main.c
+++ b/dlls/dinput/dinput_main.c
@@ -762,7 +762,8 @@ static HRESULT WINAPI IDirectInput8WImpl_EnumDevicesBySemantics(
     DIDEVICEINSTANCEW didevi;
     LPDIRECTINPUTDEVICE8W lpdid;
     DWORD callbackFlags;
-    int i, j;
+    unsigned int i = 0;
+    HRESULT hr;
     int device_count = 0;
     int remain;
     DIDEVICEINSTANCEW *didevis = 0;
@@ -772,28 +773,17 @@ static HRESULT WINAPI IDirectInput8WImpl_EnumDevicesBySemantics(
 
     didevi.dwSize = sizeof(didevi);
 
-    /* Enumerate all the joysticks */
-    for (i = 0; i < ARRAY_SIZE(dinput_devices); i++)
+    do
     {
-        HRESULT enumSuccess;
-
-        if (!dinput_devices[i]->enum_device) continue;
-
-        for (j = 0, enumSuccess = S_OK; SUCCEEDED(enumSuccess); j++)
+        hr = hid_joystick_enum_device( DI8DEVCLASS_GAMECTRL, DIEDFL_ATTACHEDONLY | dwFlags, &didevi, This->dwVersion, i++ );
+        if (hr != DI_OK) continue;
+        if (should_enumerate_device( ptszUserName, dwFlags, &This->device_players, &didevi.guidInstance ))
         {
-            TRACE(" - checking device %u ('%s')\n", i, dinput_devices[i]->name);
-
-            /* Default behavior is to enumerate attached game controllers */
-            enumSuccess = dinput_devices[i]->enum_device(DI8DEVCLASS_GAMECTRL, DIEDFL_ATTACHEDONLY | dwFlags, &didevi, This->dwVersion, j);
-            if (enumSuccess == S_OK &&
-                should_enumerate_device(ptszUserName, dwFlags, &This->device_players, &didevi.guidInstance))
-            {
-                device_count++;
-                didevis = realloc( didevis, sizeof(DIDEVICEINSTANCEW) * device_count );
-                didevis[device_count-1] = didevi;
-            }
+            device_count++;
+            didevis = realloc( didevis, sizeof(DIDEVICEINSTANCEW) * device_count );
+            didevis[device_count - 1] = didevi;
         }
-    }
+    } while (SUCCEEDED(hr));
 
     remain = device_count;
     /* Add keyboard and mouse to remaining device count */




More information about the wine-cvs mailing list