From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/input.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c index 0abf0cd4446..3a5802b75b6 100644 --- a/dlls/win32u/input.c +++ b/dlls/win32u/input.c @@ -955,9 +955,19 @@ HKL WINAPI NtUserGetKeyboardLayout( DWORD thread_id ) */ SHORT WINAPI NtUserGetKeyState( INT vkey ) { + struct object_lock lock = OBJECT_LOCK_INIT; + const input_shm_t *input_shm; + BOOL ret = FALSE; SHORT retval = 0; + NTSTATUS status;
- SERVER_START_REQ( get_key_state ) + while ((status = get_shared_input( GetCurrentThreadId(), &lock, &input_shm )) == STATUS_PENDING) + { + ret = !!input_shm->keystate_lock; /* needs a request for sync_input_keystate */ + retval = (signed char)(input_shm->keystate[vkey & 0xff] & 0x81); + } + + if (!ret) SERVER_START_REQ( get_key_state ) { req->key = vkey; if (!wine_server_call( req )) retval = (signed char)(reply->state & 0x81);