[PATCH 1/4] win32u: Move process_rawinput_message() from user32.
Zebediah Figura
wine at gitlab.winehq.org
Fri Jun 17 20:17:10 CDT 2022
From: Zebediah Figura <zfigura at codeweavers.com>
---
dlls/user32/message.c | 19 ------
dlls/user32/rawinput.c | 120 +----------------------------------
dlls/user32/sysparams.c | 2 +-
dlls/user32/user_main.c | 2 +-
dlls/user32/user_private.h | 3 +-
dlls/user32/win.h | 1 -
dlls/win32u/message.c | 2 +-
dlls/win32u/ntuser_private.h | 2 +-
dlls/win32u/rawinput.c | 23 +++++++
dlls/win32u/win32u_private.h | 4 ++
10 files changed, 33 insertions(+), 145 deletions(-)
diff --git a/dlls/user32/message.c b/dlls/user32/message.c
index 02c40f2ca4f..eff0c4efbcf 100644
--- a/dlls/user32/message.c
+++ b/dlls/user32/message.c
@@ -558,25 +558,6 @@ BOOL unpack_dde_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lparam
return TRUE;
}
-BOOL process_rawinput_message( MSG *msg, UINT hw_id, const struct hardware_msg_data *msg_data )
-{
- struct rawinput_thread_data *thread_data = rawinput_thread_data();
-
- if (msg->message == WM_INPUT_DEVICE_CHANGE)
- rawinput_update_device_list();
- else
- {
- thread_data->buffer->header.dwSize = RAWINPUT_BUFFER_SIZE;
- if (!rawinput_from_hardware_message( thread_data->buffer, msg_data )) return FALSE;
- thread_data->hw_id = hw_id;
- msg->lParam = (LPARAM)hw_id;
- }
-
- msg->pt = point_phys_to_win_dpi( msg->hwnd, msg->pt );
- return TRUE;
-}
-
-
/***********************************************************************
* SendMessageTimeoutW (USER32.@)
*/
diff --git a/dlls/user32/rawinput.c b/dlls/user32/rawinput.c
index f8980f03e9e..9286aceb670 100644
--- a/dlls/user32/rawinput.c
+++ b/dlls/user32/rawinput.c
@@ -297,7 +297,7 @@ static void enumerate_devices( DWORD type, const WCHAR *class )
NtClose( class_key );
}
-void rawinput_update_device_list(void)
+void CDECL rawinput_update_device_list(void)
{
DWORD idx;
@@ -362,124 +362,6 @@ struct rawinput_thread_data * WINAPI rawinput_thread_data(void)
}
-BOOL rawinput_from_hardware_message(RAWINPUT *rawinput, const struct hardware_msg_data *msg_data)
-{
- SIZE_T size;
-
- rawinput->header.dwType = msg_data->rawinput.type;
- if (msg_data->rawinput.type == RIM_TYPEMOUSE)
- {
- static const unsigned int button_flags[] =
- {
- 0, /* MOUSEEVENTF_MOVE */
- RI_MOUSE_LEFT_BUTTON_DOWN, /* MOUSEEVENTF_LEFTDOWN */
- RI_MOUSE_LEFT_BUTTON_UP, /* MOUSEEVENTF_LEFTUP */
- RI_MOUSE_RIGHT_BUTTON_DOWN, /* MOUSEEVENTF_RIGHTDOWN */
- RI_MOUSE_RIGHT_BUTTON_UP, /* MOUSEEVENTF_RIGHTUP */
- RI_MOUSE_MIDDLE_BUTTON_DOWN, /* MOUSEEVENTF_MIDDLEDOWN */
- RI_MOUSE_MIDDLE_BUTTON_UP, /* MOUSEEVENTF_MIDDLEUP */
- };
- unsigned int i;
-
- rawinput->header.dwSize = FIELD_OFFSET(RAWINPUT, data) + sizeof(RAWMOUSE);
- rawinput->header.hDevice = WINE_MOUSE_HANDLE;
- rawinput->header.wParam = 0;
-
- rawinput->data.mouse.usFlags = MOUSE_MOVE_RELATIVE;
- rawinput->data.mouse.usButtonFlags = 0;
- rawinput->data.mouse.usButtonData = 0;
- for (i = 1; i < ARRAY_SIZE(button_flags); ++i)
- {
- if (msg_data->flags & (1 << i))
- rawinput->data.mouse.usButtonFlags |= button_flags[i];
- }
- if (msg_data->flags & MOUSEEVENTF_WHEEL)
- {
- rawinput->data.mouse.usButtonFlags |= RI_MOUSE_WHEEL;
- rawinput->data.mouse.usButtonData = msg_data->rawinput.mouse.data;
- }
- if (msg_data->flags & MOUSEEVENTF_HWHEEL)
- {
- rawinput->data.mouse.usButtonFlags |= RI_MOUSE_HORIZONTAL_WHEEL;
- rawinput->data.mouse.usButtonData = msg_data->rawinput.mouse.data;
- }
- if (msg_data->flags & MOUSEEVENTF_XDOWN)
- {
- if (msg_data->rawinput.mouse.data == XBUTTON1)
- rawinput->data.mouse.usButtonFlags |= RI_MOUSE_BUTTON_4_DOWN;
- else if (msg_data->rawinput.mouse.data == XBUTTON2)
- rawinput->data.mouse.usButtonFlags |= RI_MOUSE_BUTTON_5_DOWN;
- }
- if (msg_data->flags & MOUSEEVENTF_XUP)
- {
- if (msg_data->rawinput.mouse.data == XBUTTON1)
- rawinput->data.mouse.usButtonFlags |= RI_MOUSE_BUTTON_4_UP;
- else if (msg_data->rawinput.mouse.data == XBUTTON2)
- rawinput->data.mouse.usButtonFlags |= RI_MOUSE_BUTTON_5_UP;
- }
-
- rawinput->data.mouse.ulRawButtons = 0;
- rawinput->data.mouse.lLastX = msg_data->rawinput.mouse.x;
- rawinput->data.mouse.lLastY = msg_data->rawinput.mouse.y;
- rawinput->data.mouse.ulExtraInformation = msg_data->info;
- }
- else if (msg_data->rawinput.type == RIM_TYPEKEYBOARD)
- {
- rawinput->header.dwSize = FIELD_OFFSET(RAWINPUT, data) + sizeof(RAWKEYBOARD);
- rawinput->header.hDevice = WINE_KEYBOARD_HANDLE;
- rawinput->header.wParam = 0;
-
- rawinput->data.keyboard.MakeCode = msg_data->rawinput.kbd.scan;
- rawinput->data.keyboard.Flags = msg_data->flags & KEYEVENTF_KEYUP ? RI_KEY_BREAK : RI_KEY_MAKE;
- if (msg_data->flags & KEYEVENTF_EXTENDEDKEY) rawinput->data.keyboard.Flags |= RI_KEY_E0;
- rawinput->data.keyboard.Reserved = 0;
-
- switch (msg_data->rawinput.kbd.vkey)
- {
- case VK_LSHIFT:
- case VK_RSHIFT:
- rawinput->data.keyboard.VKey = VK_SHIFT;
- rawinput->data.keyboard.Flags &= ~RI_KEY_E0;
- break;
- case VK_LCONTROL:
- case VK_RCONTROL:
- rawinput->data.keyboard.VKey = VK_CONTROL;
- break;
- case VK_LMENU:
- case VK_RMENU:
- rawinput->data.keyboard.VKey = VK_MENU;
- break;
- default:
- rawinput->data.keyboard.VKey = msg_data->rawinput.kbd.vkey;
- break;
- }
-
- rawinput->data.keyboard.Message = msg_data->rawinput.kbd.message;
- rawinput->data.keyboard.ExtraInformation = msg_data->info;
- }
- else if (msg_data->rawinput.type == RIM_TYPEHID)
- {
- size = msg_data->size - sizeof(*msg_data);
- if (size > rawinput->header.dwSize - sizeof(*rawinput)) return FALSE;
-
- rawinput->header.dwSize = FIELD_OFFSET( RAWINPUT, data.hid.bRawData ) + size;
- rawinput->header.hDevice = ULongToHandle( msg_data->rawinput.hid.device );
- rawinput->header.wParam = 0;
-
- rawinput->data.hid.dwCount = msg_data->rawinput.hid.count;
- rawinput->data.hid.dwSizeHid = msg_data->rawinput.hid.length;
- memcpy( rawinput->data.hid.bRawData, msg_data + 1, size );
- }
- else
- {
- FIXME("Unhandled rawinput type %#x.\n", msg_data->rawinput.type);
- return FALSE;
- }
-
- return TRUE;
-}
-
-
/***********************************************************************
* GetRawInputDeviceList (USER32.@)
*/
diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c
index ec83a1822a5..738186afb89 100644
--- a/dlls/user32/sysparams.c
+++ b/dlls/user32/sysparams.c
@@ -724,7 +724,7 @@ POINT point_win_to_phys_dpi( HWND hwnd, POINT pt )
/**********************************************************************
* point_phys_to_win_dpi
*/
-POINT point_phys_to_win_dpi( HWND hwnd, POINT pt )
+static POINT point_phys_to_win_dpi( HWND hwnd, POINT pt )
{
return map_dpi_point( pt, get_win_monitor_dpi( hwnd ), GetDpiForWindow( hwnd ));
}
diff --git a/dlls/user32/user_main.c b/dlls/user32/user_main.c
index 4901bcf7193..72d5f30e536 100644
--- a/dlls/user32/user_main.c
+++ b/dlls/user32/user_main.c
@@ -162,7 +162,7 @@ static const struct user_callbacks user_funcs =
MENU_GetSysMenu,
notify_ime,
post_dde_message,
- process_rawinput_message,
+ rawinput_update_device_list,
rawinput_device_get_usages,
SCROLL_SetStandardScrollPainted,
unpack_dde_message,
diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h
index 9a2b7de4509..d15a3b6856e 100644
--- a/dlls/user32/user_private.h
+++ b/dlls/user32/user_private.h
@@ -61,10 +61,9 @@ struct dce;
struct tagWND;
struct hardware_msg_data;
-extern BOOL rawinput_from_hardware_message(RAWINPUT *rawinput, const struct hardware_msg_data *msg_data);
extern BOOL rawinput_device_get_usages(HANDLE handle, USAGE *usage_page, USAGE *usage);
extern struct rawinput_thread_data * WINAPI rawinput_thread_data(void);
-extern void rawinput_update_device_list(void);
+extern void CDECL rawinput_update_device_list(void);
extern BOOL post_dde_message( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, DWORD dest_tid,
DWORD type ) DECLSPEC_HIDDEN;
diff --git a/dlls/user32/win.h b/dlls/user32/win.h
index 1dfc8eb0ad1..79e26a6c86c 100644
--- a/dlls/user32/win.h
+++ b/dlls/user32/win.h
@@ -63,7 +63,6 @@ extern UINT get_win_monitor_dpi( HWND hwnd ) DECLSPEC_HIDDEN;
extern UINT get_thread_dpi(void) DECLSPEC_HIDDEN;
extern POINT map_dpi_point( POINT pt, UINT dpi_from, UINT dpi_to ) DECLSPEC_HIDDEN;
extern POINT point_win_to_phys_dpi( HWND hwnd, POINT pt ) DECLSPEC_HIDDEN;
-extern POINT point_phys_to_win_dpi( HWND hwnd, POINT pt ) DECLSPEC_HIDDEN;
extern POINT point_win_to_thread_dpi( HWND hwnd, POINT pt ) DECLSPEC_HIDDEN;
extern RECT map_dpi_rect( RECT rect, UINT dpi_from, UINT dpi_to ) DECLSPEC_HIDDEN;
extern RECT rect_win_to_thread_dpi( HWND hwnd, RECT rect ) DECLSPEC_HIDDEN;
diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c
index f5315ec5dd4..94a1bc71520 100644
--- a/dlls/win32u/message.c
+++ b/dlls/win32u/message.c
@@ -1602,7 +1602,7 @@ static BOOL process_hardware_message( MSG *msg, UINT hw_id, const struct hardwar
context = SetThreadDpiAwarenessContext( DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE );
if (msg->message == WM_INPUT || msg->message == WM_INPUT_DEVICE_CHANGE)
- ret = user_callbacks && user_callbacks->process_rawinput_message( msg, hw_id, msg_data );
+ ret = process_rawinput_message( msg, hw_id, msg_data );
else if (is_keyboard_message( msg->message ))
ret = process_keyboard_message( msg, hw_id, hwnd_filter, first, last, remove );
else if (is_mouse_message( msg->message ))
diff --git a/dlls/win32u/ntuser_private.h b/dlls/win32u/ntuser_private.h
index e8051ac39d3..fd644484e48 100644
--- a/dlls/win32u/ntuser_private.h
+++ b/dlls/win32u/ntuser_private.h
@@ -41,7 +41,7 @@ struct user_callbacks
void (CDECL *notify_ime)( HWND hwnd, UINT param );
BOOL (CDECL *post_dde_message)( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, DWORD dest_tid,
DWORD type );
- BOOL (CDECL *process_rawinput_message)( MSG *msg, UINT hw_id, const struct hardware_msg_data *msg_data );
+ void (CDECL *rawinput_update_device_list)(void);
BOOL (CDECL *rawinput_device_get_usages)(HANDLE handle, USHORT *usage_page, USHORT *usage);
void (WINAPI *set_standard_scroll_painted)( HWND hwnd, INT bar, BOOL visible );
BOOL (CDECL *unpack_dde_message)( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lparam,
diff --git a/dlls/win32u/rawinput.c b/dlls/win32u/rawinput.c
index d6f38382b4b..046e25ecf6a 100644
--- a/dlls/win32u/rawinput.c
+++ b/dlls/win32u/rawinput.c
@@ -334,3 +334,26 @@ UINT WINAPI NtUserGetRawInputData( HRAWINPUT rawinput, UINT command, void *data,
memcpy( data, thread_data->buffer, size );
return size;
}
+
+BOOL process_rawinput_message( MSG *msg, UINT hw_id, const struct hardware_msg_data *msg_data )
+{
+ struct rawinput_thread_data *thread_data;
+
+ if (!user_callbacks || !(thread_data = user_callbacks->get_rawinput_thread_data()))
+ return FALSE;
+
+ if (msg->message == WM_INPUT_DEVICE_CHANGE)
+ {
+ if (user_callbacks) user_callbacks->rawinput_update_device_list();
+ }
+ else
+ {
+ thread_data->buffer->header.dwSize = RAWINPUT_BUFFER_SIZE;
+ if (!rawinput_from_hardware_message( thread_data->buffer, msg_data )) return FALSE;
+ thread_data->hw_id = hw_id;
+ msg->lParam = (LPARAM)hw_id;
+ }
+
+ msg->pt = point_phys_to_win_dpi( msg->hwnd, msg->pt );
+ return TRUE;
+}
diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h
index b2d16b07d8e..406d71ab06d 100644
--- a/dlls/win32u/win32u_private.h
+++ b/dlls/win32u/win32u_private.h
@@ -30,6 +30,7 @@
#include "wine/gdi_driver.h"
#include "wine/unixlib.h"
#include "wine/debug.h"
+#include "wine/server.h"
extern const struct user_callbacks *user_callbacks DECLSPEC_HIDDEN;
@@ -437,6 +438,9 @@ extern LRESULT send_message( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam )
extern LRESULT send_message_timeout( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam,
UINT flags, UINT timeout, PDWORD_PTR res_ptr, BOOL ansi );
+/* rawinput.c */
+extern BOOL process_rawinput_message( MSG *msg, UINT hw_id, const struct hardware_msg_data *msg_data ) DECLSPEC_HIDDEN;
+
/* sysparams.c */
extern BOOL enable_thunk_lock DECLSPEC_HIDDEN;
extern DWORD process_layout DECLSPEC_HIDDEN;
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/271
More information about the wine-devel
mailing list