release keys when xfreerdp is unfocused to prevent stuck keys
authorSeray Rosh <seray.rosh@web.de>
Fri, 27 Feb 2015 15:02:40 +0000 (16:02 +0100)
committerSeray Rosh <seray.rosh@web.de>
Fri, 27 Feb 2015 15:02:40 +0000 (16:02 +0100)
client/X11/xf_event.c
client/X11/xf_keyboard.c

index ff4c0d2..742ddc7 100644 (file)
@@ -545,6 +545,7 @@ static BOOL xf_event_FocusOut(xfContext* xfc, XEvent* event, BOOL app)
        if (event->xfocus.mode == NotifyWhileGrabbed)
                XUngrabKeyboard(xfc->display, CurrentTime);
 
+       xf_keyboard_release_all_keypress(xfc);
        xf_keyboard_clear(xfc);
 
        if (app)
index f09d6a9..f9eed58 100644 (file)
@@ -173,6 +173,12 @@ void xf_keyboard_release_all_keypress(xfContext* xfc)
                if (xfc->KeyboardState[keycode] != NoSymbol)
                {
                        rdp_scancode = freerdp_keyboard_get_rdp_scancode_from_x11_keycode(keycode);
+
+                       // release tab before releasing the windows key.
+                       // this stops the start menu from opening on unfocus event.
+                       if (rdp_scancode == RDP_SCANCODE_LWIN)
+                               freerdp_input_send_keyboard_event_ex(xfc->instance->input, FALSE, RDP_SCANCODE_TAB);
+
                        freerdp_input_send_keyboard_event_ex(xfc->instance->input, FALSE, rdp_scancode);
                        xfc->KeyboardState[keycode] = NoSymbol;
                }