Module: wine Branch: master Commit: 93938ebe5eecf0ad6be5bed1772dfcdf778cd56c URL: http://source.winehq.org/git/wine.git/?a=commit;h=93938ebe5eecf0ad6be5bed177...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Nov 8 13:53:26 2007 +0100
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 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/server/queue.c b/server/queue.c index 1cda33c..51315fd 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 ); } }