From 93938ebe5eecf0ad6be5bed1772dfcdf778cd56c Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Thu, 8 Nov 2007 13:53:26 +0100 Subject: [PATCH] server: Don't drop mouse messages that should go to a different thread input. Instead requeue them into the proper destination queue. Reported by Ulrich Czekalla. --- server/queue.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/server/queue.c b/server/queue.c index 1cda33c6e41..51315fda4d3 100644 --- a/server/queue.c +++ b/server/queue.c @@ -1222,12 +1222,20 @@ static void release_hardware_message( struct msg_queue *queue, unsigned int hw_i struct thread *owner = get_window_thread( new_win ); if (owner) { - if (owner->queue->input == input) + msg->win = new_win; + if (owner->queue->input != input) { - msg->win = new_win; - set_queue_bits( owner->queue, get_hardware_msg_bit( msg )); - remove = 0; + list_remove( &msg->entry ); + if (msg->msg == WM_MOUSEMOVE && merge_message( owner->queue->input, msg )) + { + free_message( msg ); + release_object( owner ); + return; + } + list_add_tail( &owner->queue->input->msg_list, &msg->entry ); } + set_queue_bits( owner->queue, get_hardware_msg_bit( msg )); + remove = 0; release_object( owner ); } }