Rebase against 744f7b69bf4692265588e10650090ca2f5129ccd.

This commit is contained in:
Sebastian Lackner
2015-07-10 16:27:10 +02:00
parent 174139f1ea
commit fb6baf5e83
11 changed files with 31 additions and 984 deletions

View File

@@ -1,13 +1,13 @@
From 786c3fd3cfc26cb0eb116ca0f8d28a9640722404 Mon Sep 17 00:00:00 2001
From 8be0b58eb1712de2f8ca04842fbd22cf5faa5f38 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Thu, 12 Mar 2015 02:56:21 +0100
Date: Fri, 10 Jul 2015 16:13:53 +0200
Subject: server: Implement locking and synchronization of keystate buffer.
(rev 2)
---
dlls/comctl32/tests/listview.c | 1 +
server/queue.c | 58 +++++++++++++++++++++++++++++++++++++++++-
2 files changed, 58 insertions(+), 1 deletion(-)
server/queue.c | 43 +++++++++++++++++++++++++++++++++++++++++-
2 files changed, 43 insertions(+), 1 deletion(-)
diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c
index 3edb25a..3ec4181 100644
@@ -22,7 +22,7 @@ index 3edb25a..3ec4181 100644
/* Set SHIFT key released */
diff --git a/server/queue.c b/server/queue.c
index 35ee532..f278861 100644
index e4b2969..ab8bb29 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -113,6 +113,7 @@ struct thread_input
@@ -129,11 +129,7 @@ index 35ee532..f278861 100644
/* first check for sent messages */
if ((ptr = list_head( &queue->msg_list[SEND_MESSAGE] )))
{
@@ -2857,13 +2893,33 @@ DECL_HANDLER(get_key_state)
}
else
{
+ unsigned char *keystate;
@@ -2861,7 +2897,12 @@ DECL_HANDLER(get_key_state)
if (!(thread = get_thread_from_id( req->tid ))) return;
if (thread->queue)
{
@@ -145,25 +141,8 @@ index 35ee532..f278861 100644
+ reply->state = thread->queue->input->keystate[req->key & 0xff];
+ }
set_reply_data( thread->queue->input->keystate, size );
+ release_object( thread );
+ return;
}
release_object( thread );
+
+ /* fallback to desktop keystate */
+ if (!(desktop = get_thread_desktop( current, 0 ))) return;
+ if (req->key >= 0)
+ reply->state = desktop->keystate[req->key & 0xff] & ~0x40;
+ if ((keystate = set_reply_data_size( size )))
+ {
+ unsigned int i;
+ for (i = 0; i < size; i++)
+ keystate[i] = desktop->keystate[i] & ~0x40;
+ }
+ release_object( desktop );
}
}
release_object( thread );
return;
--
2.4.2
2.4.5

View File

@@ -1,3 +1,3 @@
Fixes: [27238] Fallback to global key state for threads without a queue
# Fixes: [27238] Fallback to global key state for threads without a queue
Fixes: [31899] Implement locking and synchronization of key states
Fixes: [35907] Fix caps lock state issues with multiple processes