[PATCH] xinput: Don't look for IG_ substring when searching for gamepads.

Piotr Caban piotr at codeweavers.com
Thu May 16 07:57:28 CDT 2019


Hi Andrew,

Thanks for pointing it out. I will prepare a different patch.

Thanks,
Piotr

On 5/16/19 2:24 PM, Andrew Eikum wrote:
> On Thu, May 16, 2019 at 02:19:12PM +0200, Piotr Caban wrote:
>> Only some gamepads have "IG_" substring in DevicePath on Windows.
>>
> 
> This might cause some games to show duplicate controllers. According
> to Microsoft, the correct way to detect when a dinput device also has
> an xinput device is to search for the IG_ substring. So if we create
> xinput devices for hardware that /doesn't/ have the IG_ string, the
> game will also show the dinput device.
> 
>      https://docs.microsoft.com/en-us/windows/desktop/xinput/xinput-and-directinput
> 
> Andrew
> 
>> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47209
>> Signed-off-by: Piotr Caban <piotr at codeweavers.com>
>> ---
>>   dlls/xinput1_3/hid.c | 4 ----
>>   1 file changed, 4 deletions(-)
>>
>>
> 
>> diff --git a/dlls/xinput1_3/hid.c b/dlls/xinput1_3/hid.c
>> index 34e4e51285..1912a10a39 100644
>> --- a/dlls/xinput1_3/hid.c
>> +++ b/dlls/xinput1_3/hid.c
>> @@ -233,14 +233,10 @@ void HID_find_gamepads(xinput_controller *devices)
>>       while (SetupDiEnumDeviceInterfaces(device_info_set, NULL, &hid_guid, idx++,
>>              &interface_data) && didx < XUSER_MAX_COUNT)
>>       {
>> -        static const WCHAR ig[] = {'I','G','_',0};
>>           if (!SetupDiGetDeviceInterfaceDetailW(device_info_set,
>>                   &interface_data, data, sizeof(*data) + detail_size, NULL, NULL))
>>               continue;
>>   
>> -        if (!strstrW(data->DevicePath, ig))
>> -            continue;
>> -
>>           for (i = 0; i < XUSER_MAX_COUNT; i++)
>>           {
>>               struct hid_platform_private *private = devices[i].platform_private;
>>
> 
>>
> 




More information about the wine-devel mailing list