Update X11-modifier key state on focus_in

This commit is contained in:
Andreas Gröger 2018-07-10 20:22:18 +02:00 committed by Armin Novak
parent dd26659ab0
commit 525d089fa8

View File

@ -317,6 +317,26 @@ UINT32 xf_keyboard_get_toggle_keys_state(xfContext* xfc)
return toggleKeysState;
}
static void xk_keyboard_update_modifier_keys(xfContext* xfc)
{
int state;
size_t i;
KeyCode keycode;
int keysyms[] = {XK_Shift_L, XK_Shift_R, XK_Alt_L, XK_Alt_R,
XK_Control_L, XK_Control_R, XK_Super_L, XK_Super_R
};
state = xf_keyboard_read_keyboard_state(xfc);
for (i = 0; i < ARRAYSIZE(keysyms); i++)
{
if (xf_keyboard_get_key_state(xfc, state, keysyms[i]))
{
keycode = XKeysymToKeycode(xfc->display, keysyms[i]);
xfc->KeyboardState[keycode] = TRUE;
}
}
}
void xf_keyboard_focus_in(xfContext* xfc)
{
rdpInput* input;
@ -330,6 +350,7 @@ void xf_keyboard_focus_in(xfContext* xfc)
input = xfc->context.input;
syncFlags = xf_keyboard_get_toggle_keys_state(xfc);
input->FocusInEvent(input, syncFlags);
xk_keyboard_update_modifier_keys(xfc);
/* finish with a mouse pointer position like mstsc.exe if required */
@ -388,6 +409,9 @@ static int xf_keyboard_execute_action_script(xfContext* xfc,
if (mod->Alt)
strcat(combination, "Alt+");
if (mod->Super)
strcat(combination, "Super+");
strcat(combination, keyStr);
count = ArrayList_Count(xfc->keyCombinations);
@ -596,6 +620,7 @@ void xf_keyboard_handle_special_keys_release(xfContext* xfc, KeySym keysym)
{
xf_toggle_control(xfc);
}
xfc->mouse_active = FALSE;
XUngrabKeyboard(xfc->display, CurrentTime);
}