forked from enlightenment/enlightenment
xkb - module - fix use after free - duplicate layout info instead
instead of referring to what migh tbe deleted under us - make a dup of it to tsatore locally. fixes segv on kbd layout change @fix
This commit is contained in:
parent
ac6ceb0b99
commit
7c4e58a2fc
|
@ -146,7 +146,7 @@ _xkb_update_icon(int cur_group)
|
|||
EINA_LIST_FOREACH(instances, l, inst)
|
||||
{
|
||||
if (!e_config_xkb_layout_eq(e_config->xkb.current_layout, inst->layout))
|
||||
inst->layout = e_config->xkb.current_layout;
|
||||
inst->layout = e_config_xkb_layout_dup(e_config->xkb.current_layout);
|
||||
E_FREE_FUNC(inst->o_xkbflag, evas_object_del);
|
||||
e_theme_edje_object_set(inst->o_xkbswitch,
|
||||
"base/theme/modules/xkbswitch",
|
||||
|
@ -160,7 +160,7 @@ _xkb_update_icon(int cur_group)
|
|||
EINA_LIST_FOREACH(instances, l, inst)
|
||||
{
|
||||
if (!e_config_xkb_layout_eq(e_config->xkb.current_layout, inst->layout))
|
||||
inst->layout = e_config->xkb.current_layout;
|
||||
inst->layout = e_config_xkb_layout_dup(e_config->xkb.current_layout);
|
||||
if (!inst->o_xkbflag)
|
||||
inst->o_xkbflag = e_icon_add(inst->gcc->gadcon->evas);
|
||||
e_theme_edje_object_set(inst->o_xkbswitch,
|
||||
|
@ -186,7 +186,7 @@ _gc_init(E_Gadcon *gc, const char *gcname, const char *id, const char *style)
|
|||
inst = E_NEW(Instance, 1);
|
||||
/* The gadget */
|
||||
inst->o_xkbswitch = edje_object_add(gc->evas);
|
||||
inst->layout = e_xkb_layout_get();
|
||||
inst->layout = e_config_xkb_layout_dup(e_xkb_layout_get());
|
||||
if (e_config->xkb.only_label || (!inst->layout))
|
||||
e_theme_edje_object_set(inst->o_xkbswitch,
|
||||
"base/theme/modules/xkbswitch",
|
||||
|
@ -242,6 +242,7 @@ _gc_shutdown(E_Gadcon_Client *gcc)
|
|||
evas_object_del(inst->o_xkbswitch);
|
||||
evas_object_del(inst->o_xkbflag);
|
||||
}
|
||||
e_config_xkb_layout_free(inst->layout);
|
||||
E_FREE(inst);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue