okra pushed a commit to branch master. http://git.enlightenment.org/core/enlightenment.git/commit/?id=2f7551339675d1464dc6a8616d074b3f53763626
commit 2f7551339675d1464dc6a8616d074b3f53763626 Author: Stephen 'Okra' Houston <smhousto...@gmail.com> Date: Wed Jan 11 09:27:43 2017 -0600 Enlightenment: Sysinfo gadgets - Remove temporary gadgets correctly. --- src/modules/sysinfo/batman/batman.c | 9 +++++++-- src/modules/sysinfo/cpuclock/cpuclock.c | 9 +++++++-- src/modules/sysinfo/cpumonitor/cpumonitor.c | 6 +++++- src/modules/sysinfo/memusage/memusage.c | 6 +++++- src/modules/sysinfo/netstatus/netstatus.c | 6 +++++- src/modules/sysinfo/sysinfo.c | 30 +++++++++++++++++++++++------ src/modules/sysinfo/sysinfo.h | 12 ++++++------ src/modules/sysinfo/thermal/thermal.c | 7 ++++++- 8 files changed, 65 insertions(+), 20 deletions(-) diff --git a/src/modules/sysinfo/batman/batman.c b/src/modules/sysinfo/batman/batman.c index 56c83e4..a9e3f6a 100644 --- a/src/modules/sysinfo/batman/batman.c +++ b/src/modules/sysinfo/batman/batman.c @@ -417,7 +417,7 @@ _batman_removed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_data) if (inst->o_main != event_data) return; -#if defined(HAVE_EEZE) +#ifdef HAVE_EEZE _batman_udev_stop(inst); #elif defined __OpenBSD__ || defined __DragonFly__ || defined __FreeBSD__ || defined __NetBSD__ _batman_sysctl_stop(); @@ -431,13 +431,17 @@ _batman_removed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_data) eeze_shutdown(); #endif + evas_object_event_callback_del_full(inst->o_main, EVAS_CALLBACK_DEL, sysinfo_batman_remove, data); + sysinfo_config->items = eina_list_remove(sysinfo_config->items, inst->cfg); E_FREE(inst->cfg); } void -sysinfo_batman_remove(Instance *inst) +sysinfo_batman_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) { + Instance *inst = data; + #ifdef HAVE_EEZE _batman_udev_stop(inst); #elif defined __OpenBSD__ || defined __DragonFly__ || defined __FreeBSD__ || defined __NetBSD__ @@ -549,6 +553,7 @@ batman_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient EINA_UNU evas_object_size_hint_aspect_set(inst->o_main, EVAS_ASPECT_CONTROL_BOTH, 1, 1); evas_object_smart_callback_add(parent, "gadget_created", _batman_created_cb, inst); evas_object_smart_callback_add(parent, "gadget_removed", _batman_removed_cb, inst); + evas_object_event_callback_add(inst->o_main, EVAS_CALLBACK_DEL, sysinfo_batman_remove, inst); evas_object_show(inst->o_main); #ifdef HAVE_EEZE diff --git a/src/modules/sysinfo/cpuclock/cpuclock.c b/src/modules/sysinfo/cpuclock/cpuclock.c index 359f1a4..b8f14cf 100644 --- a/src/modules/sysinfo/cpuclock/cpuclock.c +++ b/src/modules/sysinfo/cpuclock/cpuclock.c @@ -767,7 +767,7 @@ _cpuclock_removed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_data) if (inst->o_main != event_data) return; - if (inst->cfg->cpuclock.handler) + if (inst->cfg->cpuclock.handler) ecore_event_handler_del(inst->cfg->cpuclock.handler); if (inst->cfg->cpuclock.frequency_check_thread) @@ -780,13 +780,17 @@ _cpuclock_removed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_data) eina_stringshare_del(inst->cfg->cpuclock.governor); if (inst->cfg->cpuclock.status) _cpuclock_status_free(inst->cfg->cpuclock.status); + evas_object_event_callback_del_full(inst->o_main, EVAS_CALLBACK_DEL, sysinfo_cpuclock_remove, data); + sysinfo_config->items = eina_list_remove(sysinfo_config->items, inst->cfg); E_FREE(inst->cfg); } void -sysinfo_cpuclock_remove(Instance *inst) +sysinfo_cpuclock_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) { + Instance *inst = data; + if (inst->cfg->cpuclock.handler) ecore_event_handler_del(inst->cfg->cpuclock.handler); @@ -905,6 +909,7 @@ cpuclock_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient EINA_U evas_object_size_hint_aspect_set(inst->o_main, EVAS_ASPECT_CONTROL_BOTH, 1, 1); evas_object_smart_callback_add(parent, "gadget_created", _cpuclock_created_cb, inst); evas_object_smart_callback_add(parent, "gadget_removed", _cpuclock_removed_cb, inst); + evas_object_event_callback_add(inst->o_main, EVAS_CALLBACK_DEL, sysinfo_cpuclock_remove, inst); evas_object_show(inst->o_main); if (inst->cfg->id < 0) return inst->o_main; diff --git a/src/modules/sysinfo/cpumonitor/cpumonitor.c b/src/modules/sysinfo/cpumonitor/cpumonitor.c index c9bc379..0d21cc3 100644 --- a/src/modules/sysinfo/cpumonitor/cpumonitor.c +++ b/src/modules/sysinfo/cpumonitor/cpumonitor.c @@ -136,13 +136,16 @@ _cpumonitor_removed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_dat evas_object_del(core->layout); E_FREE_FUNC(core, free); } + evas_object_event_callback_del_full(inst->o_main, EVAS_CALLBACK_DEL, sysinfo_cpumonitor_remove, data); + sysinfo_config->items = eina_list_remove(sysinfo_config->items, inst->cfg); E_FREE(inst->cfg); } void -sysinfo_cpumonitor_remove(Instance *inst) +sysinfo_cpumonitor_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) { + Instance *inst = data; CPU_Core *core; if (inst->cfg->cpumonitor.usage_check_thread) @@ -280,6 +283,7 @@ cpumonitor_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient EINA E_EXPAND(inst->o_main); evas_object_smart_callback_add(parent, "gadget_created", _cpumonitor_created_cb, inst); evas_object_smart_callback_add(parent, "gadget_removed", _cpumonitor_removed_cb, inst); + evas_object_event_callback_add(inst->o_main, EVAS_CALLBACK_DEL, sysinfo_cpumonitor_remove, inst); evas_object_show(inst->o_main); if (inst->cfg->id < 0) return inst->o_main; diff --git a/src/modules/sysinfo/memusage/memusage.c b/src/modules/sysinfo/memusage/memusage.c index 9c2da2e..99c8d20 100644 --- a/src/modules/sysinfo/memusage/memusage.c +++ b/src/modules/sysinfo/memusage/memusage.c @@ -92,14 +92,17 @@ _memusage_removed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_data) ecore_thread_cancel(inst->cfg->memusage.usage_check_thread); inst->cfg->memusage.usage_check_thread = NULL; } + evas_object_event_callback_del_full(inst->o_main, EVAS_CALLBACK_DEL, sysinfo_memusage_remove, data); sysinfo_config->items = eina_list_remove(sysinfo_config->items, inst->cfg); E_FREE(inst->cfg); } void -sysinfo_memusage_remove(Instance *inst) +sysinfo_memusage_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) { + Instance *inst = data; + if (inst->cfg->memusage.usage_check_thread) { ecore_thread_cancel(inst->cfg->memusage.usage_check_thread); @@ -224,6 +227,7 @@ memusage_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient EINA_U E_EXPAND(inst->o_main); evas_object_smart_callback_add(parent, "gadget_created", _memusage_created_cb, inst); evas_object_smart_callback_add(parent, "gadget_removed", _memusage_removed_cb, inst); + evas_object_event_callback_add(inst->o_main, EVAS_CALLBACK_DEL, sysinfo_memusage_remove, inst); evas_object_show(inst->o_main); if (inst->cfg->id < 0) return inst->o_main; diff --git a/src/modules/sysinfo/netstatus/netstatus.c b/src/modules/sysinfo/netstatus/netstatus.c index df8fb59..8bf3b04 100644 --- a/src/modules/sysinfo/netstatus/netstatus.c +++ b/src/modules/sysinfo/netstatus/netstatus.c @@ -105,14 +105,17 @@ _netstatus_removed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_data ecore_thread_cancel(inst->cfg->netstatus.usage_check_thread); inst->cfg->netstatus.usage_check_thread = NULL; } + evas_object_event_callback_del_full(inst->o_main, EVAS_CALLBACK_DEL, sysinfo_netstatus_remove, data); sysinfo_config->items = eina_list_remove(sysinfo_config->items, inst->cfg); E_FREE(inst->cfg); } void -sysinfo_netstatus_remove(Instance *inst) +sysinfo_netstatus_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) { + Instance *inst = data; + if (inst->cfg->netstatus.usage_check_thread) { ecore_thread_cancel(inst->cfg->netstatus.usage_check_thread); @@ -193,6 +196,7 @@ netstatus_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient EINA_ evas_object_size_hint_aspect_set(inst->o_main, EVAS_ASPECT_CONTROL_BOTH, 1, 1); evas_object_smart_callback_add(parent, "gadget_created", _netstatus_created_cb, inst); evas_object_smart_callback_add(parent, "gadget_removed", _netstatus_removed_cb, inst); + evas_object_event_callback_add(inst->o_main, EVAS_CALLBACK_DEL, sysinfo_netstatus_remove, inst); evas_object_show(inst->o_main); if (inst->cfg->id < 0) return inst->o_main; diff --git a/src/modules/sysinfo/sysinfo.c b/src/modules/sysinfo/sysinfo.c index 3988a40..bd3831f 100644 --- a/src/modules/sysinfo/sysinfo.c +++ b/src/modules/sysinfo/sysinfo.c @@ -1,5 +1,7 @@ #include "sysinfo.h" +static void _sysinfo_deleted_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED); + static void _sysinfo_removed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_data) { @@ -7,18 +9,33 @@ _sysinfo_removed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_data) if (inst->o_main != event_data) return; - sysinfo_batman_remove(inst); - sysinfo_thermal_remove(inst); - sysinfo_cpuclock_remove(inst); - sysinfo_cpumonitor_remove(inst); - sysinfo_memusage_remove(inst); - sysinfo_netstatus_remove(inst); + sysinfo_batman_remove(inst, NULL, NULL, NULL); + sysinfo_thermal_remove(inst, NULL, NULL, NULL); + sysinfo_cpuclock_remove(inst, NULL, NULL, NULL); + sysinfo_cpumonitor_remove(inst, NULL, NULL, NULL); + sysinfo_memusage_remove(inst, NULL, NULL, NULL); + sysinfo_netstatus_remove(inst, NULL, NULL, NULL); + + evas_object_event_callback_del_full(inst->o_main, EVAS_CALLBACK_DEL, _sysinfo_deleted_cb, data); sysinfo_config->items = eina_list_remove(sysinfo_config->items, inst->cfg); E_FREE(inst->cfg); } static void +_sysinfo_deleted_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) +{ + Instance *inst = data; + + sysinfo_batman_remove(inst, NULL, NULL, NULL); + sysinfo_thermal_remove(inst, NULL, NULL, NULL); + sysinfo_cpuclock_remove(inst, NULL, NULL, NULL); + sysinfo_cpumonitor_remove(inst, NULL, NULL, NULL); + sysinfo_memusage_remove(inst, NULL, NULL, NULL); + sysinfo_netstatus_remove(inst, NULL, NULL, NULL); +} + +static void _sysinfo_created_cb(void *data, Evas_Object *obj, void *event_data EINA_UNUSED) { Instance *inst = data; @@ -120,6 +137,7 @@ sysinfo_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient EINA_UN elm_object_style_set(inst->o_main, "no_inset_shadow"); E_EXPAND(inst->o_main); evas_object_size_hint_aspect_set(inst->o_main, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + evas_object_event_callback_add(inst->o_main, EVAS_CALLBACK_DEL, _sysinfo_deleted_cb, inst); evas_object_show(inst->o_main); evas_object_smart_callback_add(parent, "gadget_created", _sysinfo_created_cb, inst); diff --git a/src/modules/sysinfo/sysinfo.h b/src/modules/sysinfo/sysinfo.h index 42cec8f..ef716c9 100644 --- a/src/modules/sysinfo/sysinfo.h +++ b/src/modules/sysinfo/sysinfo.h @@ -235,12 +235,12 @@ EINTERN Evas_Object *sysinfo_cpumonitor_create(Evas_Object *parent, Instance *in EINTERN Evas_Object *sysinfo_memusage_create(Evas_Object *parent, Instance *inst); EINTERN Evas_Object *sysinfo_netstatus_create(Evas_Object *parent, Instance *inst); -EINTERN void sysinfo_batman_remove(Instance *inst); -EINTERN void sysinfo_thermal_remove(Instance *inst); -EINTERN void sysinfo_cpuclock_remove(Instance *inst); -EINTERN void sysinfo_cpumonitor_remove(Instance *inst); -EINTERN void sysinfo_memusage_remove(Instance *inst); -EINTERN void sysinfo_netstatus_remove(Instance *inst); +EINTERN void sysinfo_batman_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED); +EINTERN void sysinfo_thermal_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED); +EINTERN void sysinfo_cpuclock_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED); +EINTERN void sysinfo_cpumonitor_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED); +EINTERN void sysinfo_memusage_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED); +EINTERN void sysinfo_netstatus_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED); extern Config *sysinfo_config; extern Eina_List *sysinfo_instances; diff --git a/src/modules/sysinfo/thermal/thermal.c b/src/modules/sysinfo/thermal/thermal.c index d58a688..c9ed655 100644 --- a/src/modules/sysinfo/thermal/thermal.c +++ b/src/modules/sysinfo/thermal/thermal.c @@ -195,13 +195,17 @@ _thermal_removed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_data) eeze_shutdown(); #endif + evas_object_event_callback_del_full(inst->o_main, EVAS_CALLBACK_DEL, sysinfo_thermal_remove, data); + sysinfo_config->items = eina_list_remove(sysinfo_config->items, inst->cfg); E_FREE(inst->cfg); } void -sysinfo_thermal_remove(Instance *inst) +sysinfo_thermal_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) { + Instance *inst = data; + _thermal_face_shutdown(inst); #ifdef HAVE_EEZE @@ -290,6 +294,7 @@ thermal_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient EINA_UN evas_object_size_hint_aspect_set(inst->o_main, EVAS_ASPECT_CONTROL_BOTH, 1, 1); evas_object_smart_callback_add(parent, "gadget_created", _thermal_created_cb, inst); evas_object_smart_callback_add(parent, "gadget_removed", _thermal_removed_cb, inst); + evas_object_event_callback_add(inst->o_main, EVAS_CALLBACK_DEL, sysinfo_thermal_remove, inst); evas_object_show(inst->o_main); #ifdef HAVE_EEZE --