[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