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.
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 @@
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 );
}
}