diff --git a/legacy/eobj/examples/signals/main.c b/legacy/eobj/examples/signals/main.c index 8b733cff40..846a681b11 100644 --- a/legacy/eobj/examples/signals/main.c +++ b/legacy/eobj/examples/signals/main.c @@ -27,6 +27,7 @@ main(int argc, char *argv[]) eobj_init(); Eobj *obj = eobj_add(SIMPLE_CLASS, NULL); + Simple_Public_Data *pd = eobj_data_get(obj, SIMPLE_CLASS); /* The order of these two is undetermined. */ eobj_event_callback_priority_add(obj, SIG_A_CHANGED, EOBJ_CALLBACK_PRIORITY_BEFORE, _a_changed_cb, (void *) 2); @@ -40,7 +41,14 @@ main(int argc, char *argv[]) fail_if(cb_count != 3); - eobj_event_callback_del_full(obj, SIG_A_CHANGED, _a_changed_cb, NULL); + eobj_event_callback_del_full(obj, SIG_A_CHANGED, _a_changed_cb, (void *) 3); + fail_if(pd->cb_count != 3); + eobj_event_callback_del_full(obj, SIG_A_CHANGED, _a_changed_cb, (void *) 4); + fail_if(pd->cb_count != 2); + eobj_event_callback_del(obj, SIG_A_CHANGED, _a_changed_cb); + fail_if(pd->cb_count != 1); + eobj_event_callback_del(obj, SIG_A_CHANGED, _a_changed_cb); + fail_if(pd->cb_count != 0); eobj_unref(obj); eobj_shutdown(); diff --git a/legacy/eobj/examples/signals/simple.c b/legacy/eobj/examples/signals/simple.c index 3150b27c5d..4dbb8fcc2c 100644 --- a/legacy/eobj/examples/signals/simple.c +++ b/legacy/eobj/examples/signals/simple.c @@ -5,6 +5,7 @@ EAPI Eobj_Op SIMPLE_BASE_ID = 0; typedef struct { + Simple_Public_Data pub; int a; } Private_Data; @@ -29,6 +30,7 @@ _a_set(Eobj *obj, Eobj_Op op, va_list *list) Eina_Bool _cb_added(void *data, Eobj *obj, const Eobj_Event_Description *desc, void *event_info) { + Simple_Public_Data *pd = eobj_data_get(obj, _my_class); const Eobj_Event_Description *cb_desc = event_info; (void) data; (void) desc; @@ -36,16 +38,16 @@ _cb_added(void *data, Eobj *obj, const Eobj_Event_Description *desc, void *event if (cb_desc != SIG_A_CHANGED) return EINA_TRUE; - int count = (int) eobj_generic_data_get(obj, "cb_count") + 1; - eobj_generic_data_set(obj, "cb_count", (void *) count); + pd->cb_count++; - printf("Added SIG_A_CHANGED callback to %p. Count: %d\n", obj, count); + printf("Added SIG_A_CHANGED callback to %p. Count: %d\n", obj, pd->cb_count); return EINA_TRUE; } Eina_Bool _cb_deled(void *data, Eobj *obj, const Eobj_Event_Description *desc, void *event_info) { + Simple_Public_Data *pd = eobj_data_get(obj, _my_class); const Eobj_Event_Description *cb_desc = event_info; (void) data; (void) desc; @@ -53,10 +55,9 @@ _cb_deled(void *data, Eobj *obj, const Eobj_Event_Description *desc, void *event if (cb_desc != SIG_A_CHANGED) return EINA_TRUE; - int count = (int) eobj_generic_data_get(obj, "cb_count") - 1; - eobj_generic_data_set(obj, "cb_count", (void *) count); + pd->cb_count--; - printf("Removed SIG_A_CHANGED callback from %p. Count: %d\n", obj, count); + printf("Removed SIG_A_CHANGED callback from %p. Count: %d\n", obj, pd->cb_count); return EINA_TRUE; } diff --git a/legacy/eobj/examples/signals/simple.h b/legacy/eobj/examples/signals/simple.h index 3aa2023f59..99c88075df 100644 --- a/legacy/eobj/examples/signals/simple.h +++ b/legacy/eobj/examples/signals/simple.h @@ -10,6 +10,11 @@ enum { SIMPLE_SUB_ID_LAST }; +typedef struct +{ + int cb_count; +} Simple_Public_Data; + #define SIMPLE_ID(sub_id) (SIMPLE_BASE_ID + sub_id) #define SIMPLE_A_SET(a) SIMPLE_ID(SIMPLE_SUB_ID_A_SET), EOBJ_TYPECHECK(int, a)