kbd: Restoring changed remote modifiers after keypress. Fixes problem with shift & altgr 'stuck' down after typing, for example, A

git-svn-id: svn://svn.code.sf.net/p/rdesktop/code/trunk/rdesktop@448 423420c4-83ab-492f-b58f-81f9feb106b5
This commit is contained in:
Peter Åstrand 2003-08-27 09:42:55 +00:00
parent d8670cb4de
commit d097a9e44a
2 changed files with 19 additions and 1 deletions

View File

@ -45,6 +45,7 @@ static BOOL keymap_loaded;
static key_translation keymap[KEYMAP_SIZE]; static key_translation keymap[KEYMAP_SIZE];
static int min_keycode; static int min_keycode;
static uint16 remote_modifier_state = 0; static uint16 remote_modifier_state = 0;
static uint16 saved_remote_modifier_state = 0;
static void update_modifier_state(uint8 scancode, BOOL pressed); static void update_modifier_state(uint8 scancode, BOOL pressed);
@ -414,6 +415,21 @@ get_ksname(uint32 keysym)
return ksname; return ksname;
} }
void
save_remote_modifiers()
{
saved_remote_modifier_state = remote_modifier_state;
}
void
restore_remote_modifiers(uint32 ev_time)
{
key_translation dummy;
dummy.scancode = 0;
dummy.modifiers = saved_remote_modifier_state;
ensure_remote_modifiers(ev_time, dummy);
}
void void
ensure_remote_modifiers(uint32 ev_time, key_translation tr) ensure_remote_modifiers(uint32 ev_time, key_translation tr)

4
xwin.c
View File

@ -833,9 +833,11 @@ xwin_process_events(void)
if (tr.scancode == 0) if (tr.scancode == 0)
break; break;
save_remote_modifiers();
ensure_remote_modifiers(ev_time, tr); ensure_remote_modifiers(ev_time, tr);
rdp_send_scancode(ev_time, RDP_KEYPRESS, tr.scancode); rdp_send_scancode(ev_time, RDP_KEYPRESS, tr.scancode);
restore_remote_modifiers();
break; break;
case KeyRelease: case KeyRelease: