From 8c203e862f0fe4c23b1b1641045b9f49fb3d4d5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C3=85strand?= Date: Tue, 17 Sep 2002 08:18:41 +0000 Subject: [PATCH] xwin_reset_keys -> reset_modifier_keys. Only when necessary git-svn-id: svn://svn.code.sf.net/p/rdesktop/code/trunk/rdesktop@169 423420c4-83ab-492f-b58f-81f9feb106b5 --- xkeymap.c | 28 ++++++++++++++++++++++++++++ xwin.c | 17 ++--------------- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/xkeymap.c b/xkeymap.c index 4c50d08..a1e21bb 100644 --- a/xkeymap.c +++ b/xkeymap.c @@ -420,6 +420,34 @@ ensure_remote_modifiers(uint32 ev_time, key_translation tr) } +void +reset_modifier_keys() +{ + /* reset keys */ + uint32 ev_time; + ev_time = time(NULL); + + if (MASK_HAS_BITS(remote_modifier_state, MapLeftShiftMask) && !get_key_state(XK_Shift_L)) + rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_LSHIFT); + + if (MASK_HAS_BITS(remote_modifier_state, MapRightShiftMask) && !get_key_state(XK_Shift_R)) + rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_RSHIFT); + + if (MASK_HAS_BITS(remote_modifier_state, MapLeftCtrlMask) && !get_key_state(XK_Control_L)) + rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_LCTRL); + + if (MASK_HAS_BITS(remote_modifier_state, MapRightCtrlMask) && !get_key_state(XK_Control_R)) + rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_RCTRL); + + if (MASK_HAS_BITS(remote_modifier_state, MapLeftAltMask) && !get_key_state(XK_Alt_L)) + rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_LALT); + + if (MASK_HAS_BITS(remote_modifier_state, MapRightAltMask) && + !get_key_state(XK_Alt_R) && !get_key_state(XK_Mode_switch)) + rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_RALT); +} + + static void update_modifier_state(uint16 modifiers, BOOL pressed) { diff --git a/xwin.c b/xwin.c index 3a9cf42..e29c346 100644 --- a/xwin.c +++ b/xwin.c @@ -435,19 +435,6 @@ ui_destroy_window() display = NULL; } -static void -xwin_reset_keys() -{ - /* reset keys */ - uint32 ev_time; - ev_time = time(NULL); - rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_LCTRL); - rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_LALT); - rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_LSHIFT); - rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_RCTRL); - rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_RALT); - rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_RSHIFT); -} void xwin_toggle_fullscreen() @@ -582,8 +569,8 @@ xwin_process_events() XUngrabKeyboard(display, CurrentTime); break; - case FocusOut: - xwin_reset_keys(); + case FocusIn: + reset_modifier_keys(); break; case Expose: