[RFC PATCH 2/6] winemac.drv: Replace __wine_send_input with direct send_hardware_message request.

Rémi Bernon rbernon at codeweavers.com
Mon Nov 11 14:22:59 CST 2019


Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 dlls/winemac.drv/ime.c      | 32 +++++++++++++++++++-------------
 dlls/winemac.drv/keyboard.c | 23 +++++++++++++----------
 dlls/winemac.drv/mouse.c    | 23 ++++++++++++++---------
 3 files changed, 46 insertions(+), 32 deletions(-)

diff --git a/dlls/winemac.drv/ime.c b/dlls/winemac.drv/ime.c
index dabe6654f98..a8e114457ad 100644
--- a/dlls/winemac.drv/ime.c
+++ b/dlls/winemac.drv/ime.c
@@ -1384,6 +1384,23 @@ BOOL WINAPI ImeInquire(LPIMEINFO lpIMEInfo, LPWSTR lpszUIClass, LPCWSTR lpszOpti
 
 /* Interfaces to other parts of the Mac driver */
 
+static void send_keyboard_char(HWND hwnd, int scan, int flags)
+{
+    SERVER_START_REQ(send_hardware_message)
+    {
+        req->win             = wine_server_user_handle(hwnd);
+        req->flags           = 0;
+        req->input.type      = INPUT_KEYBOARD;
+        req->input.kbd.vkey  = 0;
+        req->input.kbd.scan  = scan;
+        req->input.kbd.flags = flags;
+        req->input.kbd.time  = 0;
+        req->input.kbd.info  = 0;
+        wine_server_call(req);
+    }
+    SERVER_END_REQ;
+}
+
 /***********************************************************************
  *              macdrv_im_set_text
  */
@@ -1415,22 +1432,11 @@ void macdrv_im_set_text(const macdrv_event *event)
                 event->im_set_text.cursor_pos, !event->im_set_text.complete);
         else
         {
-            INPUT input;
             CFIndex i;
-
-            input.type              = INPUT_KEYBOARD;
-            input.ki.wVk            = 0;
-            input.ki.time           = 0;
-            input.ki.dwExtraInfo    = 0;
-
             for (i = 0; i < length; i++)
             {
-                input.ki.wScan      = chars[i];
-                input.ki.dwFlags    = KEYEVENTF_UNICODE;
-                __wine_send_input(hwnd, &input);
-
-                input.ki.dwFlags    = KEYEVENTF_UNICODE | KEYEVENTF_KEYUP;
-                __wine_send_input(hwnd, &input);
+                send_keyboard_char(hwnd, chars[i], KEYEVENTF_UNICODE);
+                send_keyboard_char(hwnd, chars[i], KEYEVENTF_UNICODE | KEYEVENTF_KEYUP);
             }
         }
 
diff --git a/dlls/winemac.drv/keyboard.c b/dlls/winemac.drv/keyboard.c
index aed4ff0d6e4..45848c3b28e 100644
--- a/dlls/winemac.drv/keyboard.c
+++ b/dlls/winemac.drv/keyboard.c
@@ -918,18 +918,21 @@ void macdrv_compute_keyboard_layout(struct macdrv_thread_data *thread_data)
  */
 static void macdrv_send_keyboard_input(HWND hwnd, WORD vkey, WORD scan, DWORD flags, DWORD time)
 {
-    INPUT input;
-
     TRACE_(key)("hwnd %p vkey=%04x scan=%04x flags=%04x\n", hwnd, vkey, scan, flags);
 
-    input.type              = INPUT_KEYBOARD;
-    input.ki.wVk            = vkey;
-    input.ki.wScan          = scan;
-    input.ki.dwFlags        = flags;
-    input.ki.time           = time;
-    input.ki.dwExtraInfo    = 0;
-
-    __wine_send_input(hwnd, &input);
+    SERVER_START_REQ(send_hardware_message)
+    {
+        req->win             = wine_server_user_handle(hwnd);
+        req->flags           = 0;
+        req->input.type      = INPUT_KEYBOARD;
+        req->input.kbd.vkey  = vkey;
+        req->input.kbd.scan  = scan;
+        req->input.kbd.flags = flags;
+        req->input.kbd.time  = time;
+        req->input.kbd.info  = 0;
+        wine_server_call(req);
+    }
+    SERVER_END_REQ;
 }
 
 
diff --git a/dlls/winemac.drv/mouse.c b/dlls/winemac.drv/mouse.c
index dd6443fe1ba..2d7a0b592a9 100644
--- a/dlls/winemac.drv/mouse.c
+++ b/dlls/winemac.drv/mouse.c
@@ -157,15 +157,20 @@ static void send_mouse_input(HWND hwnd, macdrv_window cocoa_window, UINT flags,
         SERVER_END_REQ;
     }
 
-    input.type              = INPUT_MOUSE;
-    input.mi.dx             = x;
-    input.mi.dy             = y;
-    input.mi.mouseData      = mouse_data;
-    input.mi.dwFlags        = flags;
-    input.mi.time           = time;
-    input.mi.dwExtraInfo    = 0;
-
-    __wine_send_input(top_level_hwnd, &input);
+    SERVER_START_REQ(send_hardware_message)
+    {
+        req->win               = wine_server_user_handle(top_level_hwnd);
+        req->flags             = 0;
+        req->input.type        = INPUT_MOUSE;
+        req->input.mouse.x     = x;
+        req->input.mouse.y     = y;
+        req->input.mouse.data  = mouse_data;
+        req->input.mouse.flags = flags;
+        req->input.mouse.time  = time;
+        req->input.mouse.info  = 0;
+        wine_server_call(req);
+    }
+    SERVER_END_REQ;
 }
 
 
-- 
2.24.0.rc2




More information about the wine-devel mailing list