diff --git a/client/X11/xf_event.c b/client/X11/xf_event.c index ff4c0d27a..742ddc71f 100644 --- a/client/X11/xf_event.c +++ b/client/X11/xf_event.c @@ -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) diff --git a/client/X11/xf_keyboard.c b/client/X11/xf_keyboard.c index f09d6a9dd..f9eed5807 100644 --- a/client/X11/xf_keyboard.c +++ b/client/X11/xf_keyboard.c @@ -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; }