--- sourceforge.net/trunk/rdesktop/xkeymap.c 2003/09/08 08:27:57 466 +++ sourceforge.net/trunk/rdesktop/xkeymap.c 2003/09/15 08:03:30 470 @@ -450,17 +450,44 @@ return ksname; } +static BOOL +is_modifier(uint8 scancode) +{ + switch (scancode) + { + case SCANCODE_CHAR_LSHIFT: + case SCANCODE_CHAR_RSHIFT: + case SCANCODE_CHAR_LCTRL: + case SCANCODE_CHAR_RCTRL: + case SCANCODE_CHAR_LALT: + case SCANCODE_CHAR_RALT: + case SCANCODE_CHAR_LWIN: + case SCANCODE_CHAR_RWIN: + case SCANCODE_CHAR_NUMLOCK: + return True; + default: + break; + } + return False; +} + void -save_remote_modifiers() +save_remote_modifiers(uint8 scancode) { + if (is_modifier(scancode)) + return; + saved_remote_modifier_state = remote_modifier_state; } void -restore_remote_modifiers(uint32 ev_time) +restore_remote_modifiers(uint32 ev_time, uint8 scancode) { key_translation dummy; + if (is_modifier(scancode)) + return; + dummy.scancode = 0; dummy.modifiers = saved_remote_modifier_state; ensure_remote_modifiers(ev_time, dummy); @@ -470,21 +497,8 @@ ensure_remote_modifiers(uint32 ev_time, key_translation tr) { /* If this key is a modifier, do nothing */ - switch (tr.scancode) - { - case SCANCODE_CHAR_LSHIFT: - case SCANCODE_CHAR_RSHIFT: - case SCANCODE_CHAR_LCTRL: - case SCANCODE_CHAR_RCTRL: - case SCANCODE_CHAR_LALT: - case SCANCODE_CHAR_RALT: - case SCANCODE_CHAR_LWIN: - case SCANCODE_CHAR_RWIN: - case SCANCODE_CHAR_NUMLOCK: - return; - default: - break; - } + if (is_modifier(tr.scancode)) + return; /* NumLock */ if (MASK_HAS_BITS(tr.modifiers, MapNumLockMask)