You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-09-12 18:50:20 -07:00
Rebase against 39263558a2088940aaacd6eda19ca23d40b63495.
This commit is contained in:
@@ -1,236 +0,0 @@
|
||||
From e37a301a9492b6f9ea418556c7df703899a8be58 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
|
||||
Date: Wed, 7 Apr 2021 14:52:00 +0200
|
||||
Subject: [PATCH] user32: Add RAWINPUT parameter to __wine_send_input.
|
||||
|
||||
And send_hardware_message.
|
||||
|
||||
This makes it possible to use __wine_send_input to send extended input
|
||||
data, such as HID device notifications and WM_INPUT messages carrying
|
||||
HID reports.
|
||||
|
||||
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50506
|
||||
---
|
||||
dlls/user32/input.c | 6 +++---
|
||||
dlls/user32/message.c | 2 +-
|
||||
dlls/user32/user32.spec | 2 +-
|
||||
dlls/user32/user_private.h | 2 +-
|
||||
dlls/wineandroid.drv/keyboard.c | 2 +-
|
||||
dlls/wineandroid.drv/window.c | 4 ++--
|
||||
dlls/winemac.drv/ime.c | 4 ++--
|
||||
dlls/winemac.drv/keyboard.c | 2 +-
|
||||
dlls/winemac.drv/mouse.c | 2 +-
|
||||
dlls/winex11.drv/keyboard.c | 2 +-
|
||||
dlls/winex11.drv/mouse.c | 8 ++++----
|
||||
include/winuser.h | 2 +-
|
||||
12 files changed, 19 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/dlls/user32/input.c b/dlls/user32/input.c
|
||||
index 7cf7e53a6c8..805bfe3e9de 100644
|
||||
--- a/dlls/user32/input.c
|
||||
+++ b/dlls/user32/input.c
|
||||
@@ -119,9 +119,9 @@ BOOL set_capture_window( HWND hwnd, UINT gui_flags, HWND *prev_ret )
|
||||
*
|
||||
* Internal SendInput function to allow the graphics driver to inject real events.
|
||||
*/
|
||||
-BOOL CDECL __wine_send_input( HWND hwnd, const INPUT *input )
|
||||
+BOOL CDECL __wine_send_input( HWND hwnd, const INPUT *input, const RAWINPUT *rawinput )
|
||||
{
|
||||
- NTSTATUS status = send_hardware_message( hwnd, input, 0 );
|
||||
+ NTSTATUS status = send_hardware_message( hwnd, input, rawinput, 0 );
|
||||
if (status) SetLastError( RtlNtStatusToDosError(status) );
|
||||
return !status;
|
||||
}
|
||||
@@ -210,7 +210,7 @@ UINT WINAPI SendInput( UINT count, LPINPUT inputs, int size )
|
||||
update_mouse_coords( &input );
|
||||
/* fallthrough */
|
||||
case INPUT_KEYBOARD:
|
||||
- status = send_hardware_message( 0, &input, SEND_HWMSG_INJECTED );
|
||||
+ status = send_hardware_message( 0, &input, NULL, SEND_HWMSG_INJECTED );
|
||||
break;
|
||||
case INPUT_HARDWARE:
|
||||
SetLastError( ERROR_CALL_NOT_IMPLEMENTED );
|
||||
diff --git a/dlls/user32/message.c b/dlls/user32/message.c
|
||||
index def59998a52..f87ef9fb3af 100644
|
||||
--- a/dlls/user32/message.c
|
||||
+++ b/dlls/user32/message.c
|
||||
@@ -3227,7 +3227,7 @@ static BOOL send_message( struct send_message_info *info, DWORD_PTR *res_ptr, BO
|
||||
/***********************************************************************
|
||||
* send_hardware_message
|
||||
*/
|
||||
-NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, UINT flags )
|
||||
+NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, const RAWINPUT *rawinput, UINT flags )
|
||||
{
|
||||
struct user_key_state_info *key_state_info = get_user_thread_info()->key_state;
|
||||
struct send_message_info info;
|
||||
diff --git a/dlls/user32/user32.spec b/dlls/user32/user32.spec
|
||||
index 4ef75247d71..190ee74fd6c 100644
|
||||
--- a/dlls/user32/user32.spec
|
||||
+++ b/dlls/user32/user32.spec
|
||||
@@ -834,5 +834,5 @@
|
||||
# All functions must be prefixed with '__wine_' (for internal functions)
|
||||
# or 'wine_' (for user-visible functions) to avoid namespace conflicts.
|
||||
#
|
||||
-@ cdecl __wine_send_input(long ptr)
|
||||
+@ cdecl __wine_send_input(long ptr ptr)
|
||||
@ cdecl __wine_set_pixel_format(long long)
|
||||
diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h
|
||||
index 7761a1ceb4f..dfd52421e66 100644
|
||||
--- a/dlls/user32/user_private.h
|
||||
+++ b/dlls/user32/user_private.h
|
||||
@@ -263,7 +263,7 @@ extern RECT get_virtual_screen_rect(void) DECLSPEC_HIDDEN;
|
||||
extern LRESULT call_current_hook( HHOOK hhook, INT code, WPARAM wparam, LPARAM lparam ) DECLSPEC_HIDDEN;
|
||||
extern DWORD get_input_codepage( void ) DECLSPEC_HIDDEN;
|
||||
extern BOOL map_wparam_AtoW( UINT message, WPARAM *wparam, enum wm_char_mapping mapping ) DECLSPEC_HIDDEN;
|
||||
-extern NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, UINT flags ) DECLSPEC_HIDDEN;
|
||||
+extern NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, const RAWINPUT *rawinput, UINT flags ) DECLSPEC_HIDDEN;
|
||||
extern LRESULT MSG_SendInternalMessageTimeout( DWORD dest_pid, DWORD dest_tid,
|
||||
UINT msg, WPARAM wparam, LPARAM lparam,
|
||||
UINT flags, UINT timeout, PDWORD_PTR res_ptr ) DECLSPEC_HIDDEN;
|
||||
diff --git a/dlls/wineandroid.drv/keyboard.c b/dlls/wineandroid.drv/keyboard.c
|
||||
index 1c8a1e4f68f..0a6ede0ec5f 100644
|
||||
--- a/dlls/wineandroid.drv/keyboard.c
|
||||
+++ b/dlls/wineandroid.drv/keyboard.c
|
||||
@@ -680,7 +680,7 @@ static void send_keyboard_input( HWND hwnd, WORD vkey, WORD scan, DWORD flags )
|
||||
input.u.ki.time = 0;
|
||||
input.u.ki.dwExtraInfo = 0;
|
||||
|
||||
- __wine_send_input( hwnd, &input );
|
||||
+ __wine_send_input( hwnd, &input, NULL );
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
diff --git a/dlls/wineandroid.drv/window.c b/dlls/wineandroid.drv/window.c
|
||||
index 79bc471a984..1cb1bbbadc9 100644
|
||||
--- a/dlls/wineandroid.drv/window.c
|
||||
+++ b/dlls/wineandroid.drv/window.c
|
||||
@@ -521,7 +521,7 @@ static int process_events( DWORD mask )
|
||||
}
|
||||
SERVER_END_REQ;
|
||||
}
|
||||
- __wine_send_input( capture ? capture : event->data.motion.hwnd, &event->data.motion.input );
|
||||
+ __wine_send_input( capture ? capture : event->data.motion.hwnd, &event->data.motion.input, NULL );
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -535,7 +535,7 @@ static int process_events( DWORD mask )
|
||||
event->data.kbd.input.u.ki.wVk, event->data.kbd.input.u.ki.wVk,
|
||||
event->data.kbd.input.u.ki.wScan );
|
||||
update_keyboard_lock_state( event->data.kbd.input.u.ki.wVk, event->data.kbd.lock_state );
|
||||
- __wine_send_input( 0, &event->data.kbd.input );
|
||||
+ __wine_send_input( 0, &event->data.kbd.input, NULL );
|
||||
break;
|
||||
|
||||
default:
|
||||
diff --git a/dlls/winemac.drv/ime.c b/dlls/winemac.drv/ime.c
|
||||
index dabe6654f98..f2368c10743 100644
|
||||
--- a/dlls/winemac.drv/ime.c
|
||||
+++ b/dlls/winemac.drv/ime.c
|
||||
@@ -1427,10 +1427,10 @@ void macdrv_im_set_text(const macdrv_event *event)
|
||||
{
|
||||
input.ki.wScan = chars[i];
|
||||
input.ki.dwFlags = KEYEVENTF_UNICODE;
|
||||
- __wine_send_input(hwnd, &input);
|
||||
+ __wine_send_input(hwnd, &input, NULL);
|
||||
|
||||
input.ki.dwFlags = KEYEVENTF_UNICODE | KEYEVENTF_KEYUP;
|
||||
- __wine_send_input(hwnd, &input);
|
||||
+ __wine_send_input(hwnd, &input, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/dlls/winemac.drv/keyboard.c b/dlls/winemac.drv/keyboard.c
|
||||
index 1b74300e93a..1ea15f59341 100644
|
||||
--- a/dlls/winemac.drv/keyboard.c
|
||||
+++ b/dlls/winemac.drv/keyboard.c
|
||||
@@ -929,7 +929,7 @@ static void macdrv_send_keyboard_input(HWND hwnd, WORD vkey, WORD scan, DWORD fl
|
||||
input.ki.time = time;
|
||||
input.ki.dwExtraInfo = 0;
|
||||
|
||||
- __wine_send_input(hwnd, &input);
|
||||
+ __wine_send_input(hwnd, &input, NULL);
|
||||
}
|
||||
|
||||
|
||||
diff --git a/dlls/winemac.drv/mouse.c b/dlls/winemac.drv/mouse.c
|
||||
index dd6443fe1ba..d2278ae0e4c 100644
|
||||
--- a/dlls/winemac.drv/mouse.c
|
||||
+++ b/dlls/winemac.drv/mouse.c
|
||||
@@ -165,7 +165,7 @@ static void send_mouse_input(HWND hwnd, macdrv_window cocoa_window, UINT flags,
|
||||
input.mi.time = time;
|
||||
input.mi.dwExtraInfo = 0;
|
||||
|
||||
- __wine_send_input(top_level_hwnd, &input);
|
||||
+ __wine_send_input(top_level_hwnd, &input, NULL);
|
||||
}
|
||||
|
||||
|
||||
diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c
|
||||
index 35a801fc895..01620c5e4a4 100644
|
||||
--- a/dlls/winex11.drv/keyboard.c
|
||||
+++ b/dlls/winex11.drv/keyboard.c
|
||||
@@ -1148,7 +1148,7 @@ static void X11DRV_send_keyboard_input( HWND hwnd, WORD vkey, WORD scan, DWORD f
|
||||
input.u.ki.time = time;
|
||||
input.u.ki.dwExtraInfo = 0;
|
||||
|
||||
- __wine_send_input( hwnd, &input );
|
||||
+ __wine_send_input( hwnd, &input, NULL );
|
||||
}
|
||||
|
||||
|
||||
diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c
|
||||
index 94dece652b6..42bac332664 100644
|
||||
--- a/dlls/winex11.drv/mouse.c
|
||||
+++ b/dlls/winex11.drv/mouse.c
|
||||
@@ -659,7 +659,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
|
||||
sync_window_cursor( window );
|
||||
last_cursor_change = input->u.mi.time;
|
||||
}
|
||||
- __wine_send_input( hwnd, input );
|
||||
+ __wine_send_input( hwnd, input, NULL );
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -699,7 +699,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
|
||||
SERVER_END_REQ;
|
||||
}
|
||||
|
||||
- __wine_send_input( hwnd, input );
|
||||
+ __wine_send_input( hwnd, input, NULL );
|
||||
}
|
||||
|
||||
#ifdef SONAME_LIBXCURSOR
|
||||
@@ -1669,7 +1669,7 @@ void move_resize_window( HWND hwnd, int dir )
|
||||
input.u.mi.dwFlags = button_up_flags[button - 1] | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
|
||||
input.u.mi.time = GetTickCount();
|
||||
input.u.mi.dwExtraInfo = 0;
|
||||
- __wine_send_input( hwnd, &input );
|
||||
+ __wine_send_input( hwnd, &input, NULL );
|
||||
}
|
||||
|
||||
while (PeekMessageW( &msg, 0, 0, 0, PM_REMOVE ))
|
||||
@@ -1900,7 +1900,7 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
|
||||
TRACE( "pos %d,%d (event %f,%f)\n", input.u.mi.dx, input.u.mi.dy, dx, dy );
|
||||
|
||||
input.type = INPUT_MOUSE;
|
||||
- __wine_send_input( 0, &input );
|
||||
+ __wine_send_input( 0, &input, NULL );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
diff --git a/include/winuser.h b/include/winuser.h
|
||||
index 53661f6c788..0b1571c0a95 100644
|
||||
--- a/include/winuser.h
|
||||
+++ b/include/winuser.h
|
||||
@@ -4406,7 +4406,7 @@ static inline BOOL WINAPI SetRectEmpty(LPRECT rect)
|
||||
WORD WINAPI SYSTEM_KillSystemTimer( WORD );
|
||||
|
||||
#ifdef __WINESRC__
|
||||
-WINUSERAPI BOOL CDECL __wine_send_input( HWND hwnd, const INPUT *input );
|
||||
+WINUSERAPI BOOL CDECL __wine_send_input( HWND hwnd, const INPUT *input, const RAWINPUT *rawinput );
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
--
|
||||
2.30.2
|
||||
|
||||
@@ -1,69 +0,0 @@
|
||||
From 1da5b77304f9ef71340692a9d3d6e95526101ea6 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
|
||||
Date: Mon, 22 Mar 2021 18:41:55 +0100
|
||||
Subject: [PATCH] hidclass.sys: Assign rawinput device handle in
|
||||
HID_LinkDevice.
|
||||
|
||||
The handles are just numeric values and not real object handles, they
|
||||
are used in the hDevice field of the RAWINPUTHEADER struct.
|
||||
|
||||
They will also be used as an HID rawinput device array index on the
|
||||
server side.
|
||||
|
||||
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50506
|
||||
---
|
||||
dlls/hidclass.sys/device.c | 17 +++++++++++++++++
|
||||
dlls/hidclass.sys/hid.h | 1 +
|
||||
2 files changed, 18 insertions(+)
|
||||
|
||||
diff --git a/dlls/hidclass.sys/device.c b/dlls/hidclass.sys/device.c
|
||||
index fc1dfd07db1..9a3c92b3576 100644
|
||||
--- a/dlls/hidclass.sys/device.c
|
||||
+++ b/dlls/hidclass.sys/device.c
|
||||
@@ -71,6 +71,17 @@ NTSTATUS HID_CreateDevice(DEVICE_OBJECT *native_device, HID_MINIDRIVER_REGISTRAT
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
+/* user32 reserves 1 & 2 for winemouse and winekeyboard,
|
||||
+ * keep this in sync with user_private.h */
|
||||
+#define WINE_MOUSE_HANDLE 1
|
||||
+#define WINE_KEYBOARD_HANDLE 2
|
||||
+
|
||||
+static UINT32 alloc_rawinput_handle(void)
|
||||
+{
|
||||
+ static LONG counter = WINE_KEYBOARD_HANDLE + 1;
|
||||
+ return InterlockedIncrement(&counter);
|
||||
+}
|
||||
+
|
||||
NTSTATUS HID_LinkDevice(DEVICE_OBJECT *device)
|
||||
{
|
||||
WCHAR device_instance_id[MAX_DEVICE_ID_LEN];
|
||||
@@ -125,7 +136,13 @@ NTSTATUS HID_LinkDevice(DEVICE_OBJECT *device)
|
||||
{
|
||||
if (!IoRegisterDeviceInterface(device, &GUID_DEVINTERFACE_MOUSE, NULL, &ext->mouse_link_name))
|
||||
ext->is_mouse = TRUE;
|
||||
+ ext->rawinput_handle = WINE_MOUSE_HANDLE;
|
||||
}
|
||||
+ else if (ext->preparseData->caps.UsagePage == HID_USAGE_PAGE_GENERIC
|
||||
+ && ext->preparseData->caps.Usage == HID_USAGE_GENERIC_KEYBOARD)
|
||||
+ ext->rawinput_handle = WINE_KEYBOARD_HANDLE;
|
||||
+ else
|
||||
+ ext->rawinput_handle = alloc_rawinput_handle();
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
|
||||
diff --git a/dlls/hidclass.sys/hid.h b/dlls/hidclass.sys/hid.h
|
||||
index 889b8c625c0..41f3766a535 100644
|
||||
--- a/dlls/hidclass.sys/hid.h
|
||||
+++ b/dlls/hidclass.sys/hid.h
|
||||
@@ -51,6 +51,7 @@ typedef struct _BASE_DEVICE_EXTENSION {
|
||||
struct ReportRingBuffer *ring_buffer;
|
||||
HANDLE halt_event;
|
||||
HANDLE thread;
|
||||
+ UINT32 rawinput_handle;
|
||||
|
||||
KSPIN_LOCK irp_queue_lock;
|
||||
LIST_ENTRY irp_queue;
|
||||
--
|
||||
2.30.2
|
||||
|
||||
Reference in New Issue
Block a user