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

-- 


Reply via email to