forked from enlightenment/enlightenment
xkb config - fix segv on close advanced mode dialog
didnt remove the lists with del callbacks that accessed the cfdata struct to set lisrts to null on del before cfdata was freed... callback hell. yay. @fix
This commit is contained in:
parent
6d2b5e9144
commit
921f5208e7
|
@ -232,9 +232,7 @@ _create_data(E_Config_Dialog *cfd)
|
|||
static void
|
||||
_list_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
|
||||
{
|
||||
Evas_Object **o;
|
||||
|
||||
o = data;
|
||||
Evas_Object **o = data;
|
||||
|
||||
*o = NULL;
|
||||
}
|
||||
|
@ -246,12 +244,29 @@ _free_data(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata)
|
|||
|
||||
_xkb.cfd = NULL;
|
||||
|
||||
if (cfdata->compose_list)
|
||||
evas_object_event_callback_del(cfdata->compose_list, EVAS_CALLBACK_DEL, _list_del);
|
||||
if (cfdata->lv3_list)
|
||||
evas_object_event_callback_del(cfdata->lv3_list, EVAS_CALLBACK_DEL, _list_del);
|
||||
if (cfdata->switch_list)
|
||||
evas_object_event_callback_del(cfdata->switch_list, EVAS_CALLBACK_DEL, _list_del);
|
||||
#define FRAME_DEL(list) \
|
||||
if (list) { \
|
||||
evas_object_del(list); \
|
||||
list = NULL; \
|
||||
}
|
||||
FRAME_DEL(cfdata->compose_list);
|
||||
FRAME_DEL(cfdata->lv3_list);
|
||||
FRAME_DEL(cfdata->switch_list);
|
||||
FRAME_DEL(cfdata->led_list);
|
||||
FRAME_DEL(cfdata->ctrl_list);
|
||||
FRAME_DEL(cfdata->keypad_list);
|
||||
FRAME_DEL(cfdata->delkeypad_list);
|
||||
FRAME_DEL(cfdata->capslock_list);
|
||||
FRAME_DEL(cfdata->altwin_list);
|
||||
FRAME_DEL(cfdata->currency_list);
|
||||
FRAME_DEL(cfdata->lv5_list);
|
||||
FRAME_DEL(cfdata->spacebar_list);
|
||||
FRAME_DEL(cfdata->japan_list);
|
||||
FRAME_DEL(cfdata->korean_list);
|
||||
FRAME_DEL(cfdata->esperanto_list);
|
||||
FRAME_DEL(cfdata->solaris_list);
|
||||
FRAME_DEL(cfdata->terminate_list);
|
||||
FRAME_DEL(cfdata->misc_list);
|
||||
|
||||
EINA_LIST_FREE(cfdata->cfg_layouts, cl)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue