leak--: Store xkb_rule_names into Input structure so we can free the strings
on shutdown or keymap change. Signed-off-by: Chris Michael <cp.michael@samsung.com>
This commit is contained in:
parent
fa9104b305
commit
87c1798281
|
@ -74,7 +74,7 @@ static Eina_Bool _e_comp_wl_input_init(void);
|
||||||
static void _e_comp_wl_input_shutdown(void);
|
static void _e_comp_wl_input_shutdown(void);
|
||||||
static void _e_comp_wl_input_cb_bind(struct wl_client *client, void *data, unsigned int version EINA_UNUSED, unsigned int id);
|
static void _e_comp_wl_input_cb_bind(struct wl_client *client, void *data, unsigned int version EINA_UNUSED, unsigned int id);
|
||||||
static void _e_comp_wl_input_cb_unbind(struct wl_resource *resource);
|
static void _e_comp_wl_input_cb_unbind(struct wl_resource *resource);
|
||||||
static struct xkb_keymap *_e_comp_wl_input_keymap_get(void);
|
static struct xkb_keymap *_e_comp_wl_input_keymap_get(E_Wayland_Input *input);
|
||||||
static int _e_comp_wl_input_keymap_fd_get(off_t size);
|
static int _e_comp_wl_input_keymap_fd_get(off_t size);
|
||||||
static E_Wayland_Keyboard_Info *_e_comp_wl_input_keyboard_info_get(struct xkb_keymap *keymap);
|
static E_Wayland_Keyboard_Info *_e_comp_wl_input_keyboard_info_get(struct xkb_keymap *keymap);
|
||||||
|
|
||||||
|
@ -1513,12 +1513,18 @@ _e_comp_wl_cb_keymap_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void
|
||||||
struct xkb_keymap *keymap;
|
struct xkb_keymap *keymap;
|
||||||
|
|
||||||
/* try to fetch the keymap */
|
/* try to fetch the keymap */
|
||||||
if (!(keymap = _e_comp_wl_input_keymap_get()))
|
if (!(keymap = _e_comp_wl_input_keymap_get(_e_wl_comp->input)))
|
||||||
return ECORE_CALLBACK_PASS_ON;
|
return ECORE_CALLBACK_PASS_ON;
|
||||||
|
|
||||||
/* destroy keyboard */
|
/* destroy keyboard */
|
||||||
if (_e_wl_comp->input->xkb.info)
|
if (_e_wl_comp->input->xkb.info)
|
||||||
{
|
{
|
||||||
|
free((char *)_e_wl_comp->input->xkb.names.rules);
|
||||||
|
free((char *)_e_wl_comp->input->xkb.names.model);
|
||||||
|
free((char *)_e_wl_comp->input->xkb.names.layout);
|
||||||
|
free((char *)_e_wl_comp->input->xkb.names.variant);
|
||||||
|
free((char *)_e_wl_comp->input->xkb.names.options);
|
||||||
|
|
||||||
/* if we have a keymap, unreference it */
|
/* if we have a keymap, unreference it */
|
||||||
if (_e_wl_comp->input->xkb.info->keymap)
|
if (_e_wl_comp->input->xkb.info->keymap)
|
||||||
xkb_map_unref(_e_wl_comp->input->xkb.info->keymap);
|
xkb_map_unref(_e_wl_comp->input->xkb.info->keymap);
|
||||||
|
@ -1762,7 +1768,7 @@ _e_comp_wl_input_init(void)
|
||||||
_e_wl_comp->xkb.context = xkb_context_new(0);
|
_e_wl_comp->xkb.context = xkb_context_new(0);
|
||||||
|
|
||||||
/* try to fetch the keymap */
|
/* try to fetch the keymap */
|
||||||
if ((keymap = _e_comp_wl_input_keymap_get()))
|
if ((keymap = _e_comp_wl_input_keymap_get(_e_wl_comp->input)))
|
||||||
{
|
{
|
||||||
/* try to create new keyboard info */
|
/* try to create new keyboard info */
|
||||||
_e_wl_comp->input->xkb.info =
|
_e_wl_comp->input->xkb.info =
|
||||||
|
@ -1816,6 +1822,12 @@ _e_comp_wl_input_shutdown(void)
|
||||||
/* destroy keyboard */
|
/* destroy keyboard */
|
||||||
if (_e_wl_comp->input->xkb.info)
|
if (_e_wl_comp->input->xkb.info)
|
||||||
{
|
{
|
||||||
|
free((char *)_e_wl_comp->input->xkb.names.rules);
|
||||||
|
free((char *)_e_wl_comp->input->xkb.names.model);
|
||||||
|
free((char *)_e_wl_comp->input->xkb.names.layout);
|
||||||
|
free((char *)_e_wl_comp->input->xkb.names.variant);
|
||||||
|
free((char *)_e_wl_comp->input->xkb.names.options);
|
||||||
|
|
||||||
/* if we have a keymap, unreference it */
|
/* if we have a keymap, unreference it */
|
||||||
if (_e_wl_comp->input->xkb.info->keymap)
|
if (_e_wl_comp->input->xkb.info->keymap)
|
||||||
xkb_map_unref(_e_wl_comp->input->xkb.info->keymap);
|
xkb_map_unref(_e_wl_comp->input->xkb.info->keymap);
|
||||||
|
@ -1893,7 +1905,7 @@ _e_comp_wl_input_cb_unbind(struct wl_resource *resource)
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct xkb_keymap *
|
static struct xkb_keymap *
|
||||||
_e_comp_wl_input_keymap_get(void)
|
_e_comp_wl_input_keymap_get(E_Wayland_Input *input)
|
||||||
{
|
{
|
||||||
E_Config_XKB_Layout *kbd_layout;
|
E_Config_XKB_Layout *kbd_layout;
|
||||||
struct xkb_rule_names names;
|
struct xkb_rule_names names;
|
||||||
|
@ -1940,10 +1952,7 @@ _e_comp_wl_input_keymap_get(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("Keymap\n");
|
input->xkb.names = names;
|
||||||
printf("\tRules: %s\n", names.rules);
|
|
||||||
printf("\tModel: %s\n", names.model);
|
|
||||||
printf("\tLayout: %s\n", names.layout);
|
|
||||||
|
|
||||||
return xkb_map_new_from_names(_e_wl_comp->xkb.context, &names, 0);
|
return xkb_map_new_from_names(_e_wl_comp->xkb.context, &names, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -421,6 +421,7 @@ struct _E_Wayland_Input
|
||||||
{
|
{
|
||||||
E_Wayland_Keyboard_Info *info;
|
E_Wayland_Keyboard_Info *info;
|
||||||
struct xkb_state *state;
|
struct xkb_state *state;
|
||||||
|
struct xkb_rule_names names;
|
||||||
} xkb;
|
} xkb;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
|
|
Loading…
Reference in New Issue