Alexandre Julliard : server: Add a helper function to allocate a hardware message.

Alexandre Julliard julliard at winehq.org
Mon Nov 5 15:51:52 CST 2018


Module: wine
Branch: master
Commit: 383cf211da7c19855bf7d04e2f8926b64560e34e
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=383cf211da7c19855bf7d04e2f8926b64560e34e

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Mon Nov  5 12:32:24 2018 +0100

server: Add a helper function to allocate a hardware message.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 server/queue.c | 110 ++++++++++++++++-----------------------------------------
 1 file changed, 30 insertions(+), 80 deletions(-)

diff --git a/server/queue.c b/server/queue.c
index f274dfb..75070a7 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -339,31 +339,39 @@ static int assign_thread_input( struct thread *thread, struct thread_input *new_
     return 1;
 }
 
-/* set the cursor position and queue the corresponding mouse message */
-static void set_cursor_pos( struct desktop *desktop, int x, int y )
+/* allocate a hardware message and its data */
+static struct message *alloc_hardware_message( lparam_t info, unsigned int time )
 {
     struct hardware_msg_data *msg_data;
     struct message *msg;
 
-    if (!(msg = mem_alloc( sizeof(*msg) ))) return;
+    if (!(msg = mem_alloc( sizeof(*msg) ))) return NULL;
     if (!(msg_data = mem_alloc( sizeof(*msg_data) )))
     {
         free( msg );
-        return;
+        return NULL;
     }
-    memset( msg_data, 0, sizeof(*msg_data) );
-
+    memset( msg, 0, sizeof(*msg) );
     msg->type      = MSG_HARDWARE;
-    msg->win       = 0;
-    msg->msg       = WM_MOUSEMOVE;
-    msg->wparam    = 0;
-    msg->lparam    = 0;
-    msg->x         = x;
-    msg->y         = y;
-    msg->time      = get_tick_count();
-    msg->result    = NULL;
+    msg->time      = time;
     msg->data      = msg_data;
     msg->data_size = sizeof(*msg_data);
+
+    memset( msg_data, 0, sizeof(*msg_data) );
+    msg_data->info   = info;
+    return msg;
+}
+
+/* set the cursor position and queue the corresponding mouse message */
+static void set_cursor_pos( struct desktop *desktop, int x, int y )
+{
+    struct message *msg;
+
+    if (!(msg = alloc_hardware_message( 0, get_tick_count() ))) return;
+
+    msg->msg = WM_MOUSEMOVE;
+    msg->x   = x;
+    msg->y   = y;
     queue_hardware_message( desktop, msg, 1 );
 }
 
@@ -1639,24 +1647,14 @@ static int queue_mouse_message( struct desktop *desktop, user_handle_t win, cons
 
     if ((device = current->process->rawinput_mouse))
     {
-        if (!(msg = mem_alloc( sizeof(*msg) ))) return 0;
-        if (!(msg_data = mem_alloc( sizeof(*msg_data) )))
-        {
-            free( msg );
-            return 0;
-        }
+        if (!(msg = alloc_hardware_message( input->mouse.info, time ))) return 0;
+        msg_data = msg->data;
 
-        msg->type      = MSG_HARDWARE;
         msg->win       = device->target;
         msg->msg       = WM_INPUT;
         msg->wparam    = RIM_INPUT;
         msg->lparam    = 0;
-        msg->time      = time;
-        msg->data      = msg_data;
-        msg->data_size = sizeof(*msg_data);
-        msg->result    = NULL;
 
-        msg_data->info                = input->mouse.info;
         msg_data->flags               = flags;
         msg_data->rawinput.type       = RIM_TYPEMOUSE;
         msg_data->rawinput.mouse.x    = x - desktop->cursor.x;
@@ -1672,26 +1670,15 @@ static int queue_mouse_message( struct desktop *desktop, user_handle_t win, cons
         if (!(flags & (1 << i))) continue;
         flags &= ~(1 << i);
 
-        if (!(msg = mem_alloc( sizeof(*msg) ))) return 0;
-        if (!(msg_data = mem_alloc( sizeof(*msg_data) )))
-        {
-            free( msg );
-            return 0;
-        }
-        memset( msg_data, 0, sizeof(*msg_data) );
+        if (!(msg = alloc_hardware_message( input->mouse.info, time ))) return 0;
+        msg_data = msg->data;
 
-        msg->type      = MSG_HARDWARE;
         msg->win       = get_user_full_handle( win );
         msg->msg       = messages[i];
         msg->wparam    = input->mouse.data << 16;
         msg->lparam    = 0;
         msg->x         = x;
         msg->y         = y;
-        msg->time      = time;
-        msg->result    = NULL;
-        msg->data      = msg_data;
-        msg->data_size = sizeof(*msg_data);
-        msg_data->info = input->mouse.info;
         if (hook_flags & SEND_HWMSG_INJECTED) msg_data->flags = LLMHF_INJECTED;
 
         /* specify a sender only when sending the last message */
@@ -1783,26 +1770,15 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c
         break;
     }
 
+    if (!(msg = alloc_hardware_message( input->kbd.info, time ))) return 0;
+    msg_data = msg->data;
+
     if ((device = current->process->rawinput_kbd))
     {
-        if (!(msg = mem_alloc( sizeof(*msg) ))) return 0;
-        if (!(msg_data = mem_alloc( sizeof(*msg_data) )))
-        {
-            free( msg );
-            return 0;
-        }
-
-        msg->type      = MSG_HARDWARE;
         msg->win       = device->target;
         msg->msg       = WM_INPUT;
         msg->wparam    = RIM_INPUT;
-        msg->lparam    = 0;
-        msg->time      = time;
-        msg->data      = msg_data;
-        msg->data_size = sizeof(*msg_data);
-        msg->result    = NULL;
 
-        msg_data->info                 = input->kbd.info;
         msg_data->flags                = input->kbd.flags;
         msg_data->rawinput.type        = RIM_TYPEKEYBOARD;
         msg_data->rawinput.kbd.message = message_code;
@@ -1812,23 +1788,9 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c
         queue_hardware_message( desktop, msg, 0 );
     }
 
-    if (!(msg = mem_alloc( sizeof(*msg) ))) return 0;
-    if (!(msg_data = mem_alloc( sizeof(*msg_data) )))
-    {
-        free( msg );
-        return 0;
-    }
-    memset( msg_data, 0, sizeof(*msg_data) );
-
-    msg->type      = MSG_HARDWARE;
     msg->win       = get_user_full_handle( win );
     msg->msg       = message_code;
     msg->lparam    = (input->kbd.scan << 16) | 1u; /* repeat count */
-    msg->time      = time;
-    msg->result    = NULL;
-    msg->data      = msg_data;
-    msg->data_size = sizeof(*msg_data);
-    msg_data->info = input->kbd.info;
     if (hook_flags & SEND_HWMSG_INJECTED) msg_data->flags = LLKHF_INJECTED;
 
     if (input->kbd.flags & KEYEVENTF_UNICODE)
@@ -1858,28 +1820,16 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c
 static void queue_custom_hardware_message( struct desktop *desktop, user_handle_t win,
                                            const hw_input_t *input )
 {
-    struct hardware_msg_data *msg_data;
     struct message *msg;
 
-    if (!(msg = mem_alloc( sizeof(*msg) ))) return;
-    if (!(msg_data = mem_alloc( sizeof(*msg_data) )))
-    {
-        free( msg );
-        return;
-    }
-    memset( msg_data, 0, sizeof(*msg_data) );
+    if (!(msg = alloc_hardware_message( 0, get_tick_count() ))) return;
 
-    msg->type      = MSG_HARDWARE;
     msg->win       = get_user_full_handle( win );
     msg->msg       = input->hw.msg;
     msg->wparam    = 0;
     msg->lparam    = input->hw.lparam;
     msg->x         = desktop->cursor.x;
     msg->y         = desktop->cursor.y;
-    msg->time      = get_tick_count();
-    msg->result    = NULL;
-    msg->data      = msg_data;
-    msg->data_size = sizeof(*msg_data);
 
     queue_hardware_message( desktop, msg, 1 );
 }




More information about the wine-cvs mailing list