summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2022-01-21 15:53:50 +0000
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2022-01-21 16:10:38 +0000
commit921f5208e74e309dc96d202c424a5948d8ed1ec5 (patch)
tree051863b8073aa40dc002f5dbaba40950dd98172f /src
parent6d2b5e91445b16c32193c4e0319a793d9be599ef (diff)
downloadenlightenment-921f5208e74e309dc96d202c424a5948d8ed1ec5.tar.gz
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
Diffstat (limited to 'src')
-rw-r--r--src/modules/xkbswitch/e_mod_config.c33
1 files changed, 24 insertions, 9 deletions
diff --git a/src/modules/xkbswitch/e_mod_config.c b/src/modules/xkbswitch/e_mod_config.c
index 534cb2f122..e405165121 100644
--- a/src/modules/xkbswitch/e_mod_config.c
+++ b/src/modules/xkbswitch/e_mod_config.c
@@ -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)
{