Automatically release and re-press any active modifier keys before sending Alt-codes.
authorMichael Jumper <zhangmaike@users.sourceforge.net>
Wed, 21 Mar 2012 04:06:18 +0000 (21:06 -0700)
committerMichael Jumper <zhangmaike@users.sourceforge.net>
Wed, 21 Mar 2012 04:06:18 +0000 (21:06 -0700)
src/guac_handlers.c

index bfb7bda..051166a 100644 (file)
@@ -236,6 +236,9 @@ void __guac_rdp_send_altcode(guac_client* client, const char* altcode) {
     /* Lookup scancode for Alt */
     int alt = GUAC_RDP_KEYSYM_LOOKUP(*keysym_scancodes, 0xFFE9 /* Alt_L */).scancode;
 
+    /* Release all pressed modifiers */
+    __guac_rdp_update_keysyms(client, GUAC_KEYSYMS_ALL_MODIFIERS, 1, 0);
+
     /* Press Alt */
     rdp_inst->input->KeyboardEvent(rdp_inst->input, KBD_FLAGS_DOWN, alt);
 
@@ -256,6 +259,9 @@ void __guac_rdp_send_altcode(guac_client* client, const char* altcode) {
     /* Release Alt */
     rdp_inst->input->KeyboardEvent(rdp_inst->input, KBD_FLAGS_RELEASE, alt);
 
+    /* Press all originally pressed modifiers */
+    __guac_rdp_update_keysyms(client, GUAC_KEYSYMS_ALL_MODIFIERS, 1, 1);
+
 }
 
 int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) {