Module: wine Branch: master Commit: 09895076c6ec9421d26f95103324c6b8c1cc6d9a URL: https://source.winehq.org/git/wine.git/?a=commit;h=09895076c6ec9421d26f95103...
Author: Rémi Bernon rbernon@codeweavers.com Date: Wed Sep 22 12:27:26 2021 +0200
hidclass.sys: Only send WM_INPUT messages for HID devices.
And not for the internal WINEXINPUT devices.
Signed-off-by: Rémi Bernon rbernon@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/hidclass.sys/device.c | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-)
diff --git a/dlls/hidclass.sys/device.c b/dlls/hidclass.sys/device.c index 8e998bd71be..848f8da906a 100644 --- a/dlls/hidclass.sys/device.c +++ b/dlls/hidclass.sys/device.c @@ -190,27 +190,30 @@ static void hid_device_queue_input( DEVICE_OBJECT *device, HID_XFER_PACKET *pack KIRQL irql; IRP *irp;
- size = offsetof( RAWINPUT, data.hid.bRawData[packet->reportBufferLen] ); - if (!(rawinput = malloc( size ))) ERR( "Failed to allocate rawinput data!\n" ); - else + if (IsEqualGUID( ext->class_guid, &GUID_DEVINTERFACE_HID )) { - INPUT input; - - rawinput->header.dwType = RIM_TYPEHID; - rawinput->header.dwSize = size; - rawinput->header.hDevice = ULongToHandle( ext->u.pdo.rawinput_handle ); - rawinput->header.wParam = RIM_INPUT; - rawinput->data.hid.dwCount = 1; - rawinput->data.hid.dwSizeHid = packet->reportBufferLen; - memcpy( rawinput->data.hid.bRawData, packet->reportBuffer, packet->reportBufferLen ); - - input.type = INPUT_HARDWARE; - input.hi.uMsg = WM_INPUT; - input.hi.wParamH = 0; - input.hi.wParamL = 0; - __wine_send_input( 0, &input, rawinput ); - - free( rawinput ); + size = offsetof( RAWINPUT, data.hid.bRawData[packet->reportBufferLen] ); + if (!(rawinput = malloc( size ))) ERR( "Failed to allocate rawinput data!\n" ); + else + { + INPUT input; + + rawinput->header.dwType = RIM_TYPEHID; + rawinput->header.dwSize = size; + rawinput->header.hDevice = ULongToHandle( ext->u.pdo.rawinput_handle ); + rawinput->header.wParam = RIM_INPUT; + rawinput->data.hid.dwCount = 1; + rawinput->data.hid.dwSizeHid = packet->reportBufferLen; + memcpy( rawinput->data.hid.bRawData, packet->reportBuffer, packet->reportBufferLen ); + + input.type = INPUT_HARDWARE; + input.hi.uMsg = WM_INPUT; + input.hi.wParamH = 0; + input.hi.wParamL = 0; + __wine_send_input( 0, &input, rawinput ); + + free( rawinput ); + } }
if (!(last_report = hid_report_create( packet )))