--- sourceforge.net/trunk/rdesktop/xkeymap.c 2004/06/01 08:00:58 705 +++ sourceforge.net/trunk/rdesktop/xkeymap.c 2005/03/06 21:11:18 828 @@ -2,7 +2,7 @@ rdesktop: A Remote Desktop Protocol client. User interface services - X keyboard mapping - Copyright (C) Matthew Chapman 1999-2002 + Copyright (C) Matthew Chapman 1999-2005 Copyright (C) Peter Astrand 2003 This program is free software; you can redistribute it and/or modify @@ -40,7 +40,7 @@ extern Display *g_display; extern Window g_wnd; extern char keymapname[16]; -extern int keylayout; +extern int g_keylayout; extern int g_win_button_size; extern BOOL g_enable_compose; extern BOOL g_use_rdp5; @@ -137,8 +137,8 @@ /* map */ if (strncmp(line, "map ", 4) == 0) { - keylayout = strtol(line + 4, NULL, 16); - DEBUG_KBD(("Keylayout 0x%x\n", keylayout)); + g_keylayout = strtol(line + 4, NULL, 16); + DEBUG_KBD(("Keylayout 0x%x\n", g_keylayout)); continue; } @@ -408,6 +408,13 @@ } } + if (((remote_modifier_state & MapLeftCtrlMask) + || (remote_modifier_state & MapRightCtrlMask)) && get_key_state(state, XK_Caps_Lock)) + { + DEBUG_KBD(("CapsLock + Ctrl pressed, releasing LeftShift\n")); + tr.modifiers ^= MapLeftShiftMask; + } + if (tr.scancode != 0) { DEBUG_KBD(("Found key translation, scancode=0x%x, modifiers=0x%x\n", @@ -656,7 +663,8 @@ rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_LALT); if (MASK_HAS_BITS(remote_modifier_state, MapRightAltMask) && - !get_key_state(state, XK_Alt_R) && !get_key_state(state, XK_Mode_switch) && !get_key_state(state, XK_ISO_Level3_Shift)) + !get_key_state(state, XK_Alt_R) && !get_key_state(state, XK_Mode_switch) + && !get_key_state(state, XK_ISO_Level3_Shift)) rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_RALT); reset_winkey(ev_time);