dinput: Call hid_joystick_enum_device directly in EnumDevicesBySemantics.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Rémi Bernon 2021-10-26 09:17:30 +02:00 committed by Alexandre Julliard
parent a83e6db353
commit 5726c77faa
1 changed files with 10 additions and 20 deletions

View File

@ -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 */