mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-15 00:44:19 +09:00
[x11,client] unify modifier map update/free
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user