From: Alexandros Frantzis alexandros.frantzis@collabora.com
--- server/queue.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/server/queue.c b/server/queue.c index 2e9460e4c0a..9d9bea706c1 100644 --- a/server/queue.c +++ b/server/queue.c @@ -1723,6 +1723,15 @@ static void queue_hardware_message( struct desktop *desktop, struct message *msg free_message( msg ); return; } + + if (thread->process->rawinput_kbd && + (thread->process->rawinput_kbd->flags & RIDEV_NOLEGACY) && + get_hardware_msg_bit( msg->msg ) == QS_KEY) + { + free_message( msg ); + return; + } + input = thread->queue->input;
if (win != msg->win) always_queue = 1; @@ -2091,7 +2100,6 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c unsigned int origin, struct msg_queue *sender ) { struct hw_msg_source source = { IMDT_KEYBOARD, origin }; - const struct rawinput_device *device; struct hardware_msg_data *msg_data; struct message *msg; struct thread *foreground; @@ -2207,12 +2215,6 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c release_object( foreground ); }
- if ((device = current->process->rawinput_kbd) && (device->flags & RIDEV_NOLEGACY)) - { - update_input_key_state( desktop, desktop->keystate, message_code, vkey ); - return 0; - } - if (!(msg = alloc_hardware_message( input->kbd.info, source, time, 0 ))) return 0; msg_data = msg->data;