Fixed another case where a mouse message could get assigned to a
different thread input.
This commit is contained in:
parent
12f0b41d13
commit
55d449e476
|
@ -1245,23 +1245,32 @@ static int get_hardware_message( struct thread *thread, int hw_id, user_handle_t
|
||||||
while (ptr)
|
while (ptr)
|
||||||
{
|
{
|
||||||
struct message *msg = LIST_ENTRY( ptr, struct message, entry );
|
struct message *msg = LIST_ENTRY( ptr, struct message, entry );
|
||||||
|
ptr = list_next( &input->msg_list, ptr );
|
||||||
win = find_hardware_message_window( input, msg, &msg_code );
|
win = find_hardware_message_window( input, msg, &msg_code );
|
||||||
if (!win || !(win_thread = get_window_thread( win )))
|
if (!win || !(win_thread = get_window_thread( win )))
|
||||||
{
|
{
|
||||||
/* no window at all, remove it */
|
/* no window at all, remove it */
|
||||||
ptr = list_next( &input->msg_list, ptr );
|
|
||||||
update_input_key_state( input, msg );
|
update_input_key_state( input, msg );
|
||||||
list_remove( &msg->entry );
|
list_remove( &msg->entry );
|
||||||
free_message( msg );
|
free_message( msg );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (win_thread != thread)
|
if (win_thread != thread)
|
||||||
|
{
|
||||||
|
if (win_thread->queue->input == input)
|
||||||
{
|
{
|
||||||
/* wake the other thread */
|
/* wake the other thread */
|
||||||
set_queue_bits( win_thread->queue, get_hardware_msg_bit(msg) );
|
set_queue_bits( win_thread->queue, get_hardware_msg_bit(msg) );
|
||||||
release_object( win_thread );
|
|
||||||
got_one = 1;
|
got_one = 1;
|
||||||
ptr = list_next( &input->msg_list, ptr );
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* for another thread input, drop it */
|
||||||
|
update_input_key_state( input, msg );
|
||||||
|
list_remove( &msg->entry );
|
||||||
|
free_message( msg );
|
||||||
|
}
|
||||||
|
release_object( win_thread );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
release_object( win_thread );
|
release_object( win_thread );
|
||||||
|
@ -1271,7 +1280,6 @@ static int get_hardware_message( struct thread *thread, int hw_id, user_handle_t
|
||||||
if (got_one || !check_hw_message_filter( win, msg_code, filter_win, first, last ))
|
if (got_one || !check_hw_message_filter( win, msg_code, filter_win, first, last ))
|
||||||
{
|
{
|
||||||
clear_bits &= ~get_hardware_msg_bit( msg );
|
clear_bits &= ~get_hardware_msg_bit( msg );
|
||||||
ptr = list_next( &input->msg_list, ptr );
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
/* now we can return it */
|
/* now we can return it */
|
||||||
|
|
Loading…
Reference in New Issue