winex11drv: Distinguish left and right keys for shift, ctrl and alt.
diff --git a/server/queue.c b/server/queue.c
index a32bd7e..d90c36b 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -1122,7 +1122,7 @@
static void update_input_key_state( struct thread_input *input, const struct message *msg )
{
unsigned char key;
- int down = 0, extended;
+ int down = 0;
switch (msg->msg)
{
@@ -1158,29 +1158,22 @@
case WM_KEYUP:
case WM_SYSKEYUP:
key = (unsigned char)msg->wparam;
- extended = ((msg->lparam >> 16) & KF_EXTENDED) != 0;
set_input_key_state( input, key, down );
switch(key)
{
- case VK_SHIFT:
- set_input_key_state( input, extended ? VK_RSHIFT : VK_LSHIFT, down );
- break;
- case VK_CONTROL:
- set_input_key_state( input, extended ? VK_RCONTROL : VK_LCONTROL, down );
- break;
- case VK_MENU:
- set_input_key_state( input, extended ? VK_RMENU : VK_LMENU, down );
- break;
case VK_LCONTROL:
case VK_RCONTROL:
+ down = (input->keystate[VK_LCONTROL] | input->keystate[VK_RCONTROL]) & 0x80;
set_input_key_state( input, VK_CONTROL, down );
break;
case VK_LMENU:
case VK_RMENU:
+ down = (input->keystate[VK_LMENU] | input->keystate[VK_RMENU]) & 0x80;
set_input_key_state( input, VK_MENU, down );
break;
case VK_LSHIFT:
case VK_RSHIFT:
+ down = (input->keystate[VK_LSHIFT] | input->keystate[VK_RSHIFT]) & 0x80;
set_input_key_state( input, VK_SHIFT, down );
break;
}