[x11,client] unify modifier map update/free

This commit is contained in:
Armin Novak
2022-11-28 06:22:32 +01:00
committed by akallabeth
parent 4d885e3a6e
commit 96243c1d17
3 changed files with 25 additions and 17 deletions

View File

@@ -654,12 +654,7 @@ static BOOL xf_event_MappingNotify(xfContext* xfc, const XMappingEvent* event, B
WINPR_UNUSED(app);
if (event->request == MappingModifier)
{
if (xfc->modifierMap)
XFreeModifiermap(xfc->modifierMap);
xfc->modifierMap = XGetModifierMapping(xfc->display);
}
return xf_keyboard_update_modifier_map(xfc);
return TRUE;
}

View File

@@ -44,6 +44,24 @@
#include <freerdp/log.h>
#define TAG CLIENT_TAG("x11")
static void xf_keyboard_modifier_map_free(xfContext* xfc)
{
WINPR_ASSERT(xfc);
if (xfc->modifierMap)
{
XFreeModifiermap(xfc->modifierMap);
xfc->modifierMap = NULL;
}
}
BOOL xf_keyboard_update_modifier_map(xfContext* xfc)
{
WINPR_ASSERT(xfc);
xf_keyboard_modifier_map_free(xfc);
xfc->modifierMap = XGetModifierMapping(xfc->display);
return xfc->modifierMap != NULL;
}
static void xf_keyboard_send_key(xfContext* xfc, BOOL down, const XKeyEvent* ev);
static BOOL xf_sync_kbd_state(xfContext* xfc)
@@ -142,10 +160,7 @@ BOOL xf_keyboard_init(xfContext* xfc)
freerdp_keyboard_init_ex(xfc->KeyboardLayout, settings->KeyboardRemappingList);
settings->KeyboardLayout = xfc->KeyboardLayout;
if (xfc->modifierMap)
XFreeModifiermap(xfc->modifierMap);
if (!(xfc->modifierMap = XGetModifierMapping(xfc->display)))
if (!xf_keyboard_update_modifier_map(xfc))
return FALSE;
xf_keyboard_action_script_init(xfc);
@@ -154,12 +169,7 @@ BOOL xf_keyboard_init(xfContext* xfc)
void xf_keyboard_free(xfContext* xfc)
{
if (xfc->modifierMap)
{
XFreeModifiermap(xfc->modifierMap);
xfc->modifierMap = NULL;
}
xf_keyboard_modifier_map_free(xfc);
xf_keyboard_action_script_free(xfc);
}
@@ -326,6 +336,7 @@ static int xf_keyboard_get_keymask(xfContext* xfc, int keysym)
if (keycode == NoSymbol)
return 0;
WINPR_ASSERT(xfc->modifierMap);
for (modifierpos = 0; modifierpos < 8; modifierpos++)
{
int offset = xfc->modifierMap->max_keypermod * modifierpos;

View File

@@ -385,6 +385,8 @@ BOOL xf_picture_transform_required(xfContext* xfc);
void xf_draw_screen_(xfContext* xfc, int x, int y, int w, int h, const char* fkt, const char* file,
int line);
FREERDP_API DWORD xf_exit_code_from_disconnect_reason(DWORD reason);
BOOL xf_keyboard_update_modifier_map(xfContext* xfc);
DWORD xf_exit_code_from_disconnect_reason(DWORD reason);
#endif /* FREERDP_CLIENT_X11_FREERDP_H */