From e133d2f3004096ae7025ad81ab5ca10dfad380d7 Mon Sep 17 00:00:00 2001 From: Gustavo Sverzut Barbieri Date: Tue, 16 Feb 2010 12:59:37 +0000 Subject: [PATCH] API break: proper Canvas events callback. Canvas was (ab)using the same callback signature as Objects, so you always got a confusing NULL parameter. Just clean it up to be Evas_Object_Event_Cb and Evas_Event_Cb, each with its own signature. SVN revision: 46206 --- legacy/evas/src/lib/Evas.h | 23 ++++++++++++++++---- legacy/evas/src/lib/canvas/evas_callbacks.c | 24 +++++++++++---------- legacy/evas/src/lib/include/evas_private.h | 2 +- 3 files changed, 33 insertions(+), 16 deletions(-) diff --git a/legacy/evas/src/lib/Evas.h b/legacy/evas/src/lib/Evas.h index b82d6bd73c..2c8899ff94 100644 --- a/legacy/evas/src/lib/Evas.h +++ b/legacy/evas/src/lib/Evas.h @@ -43,6 +43,10 @@ typedef enum _Evas_Callback_Type { + /* + * The following events are only for use with objects + * evas_object_event_callback_add(): + */ EVAS_CALLBACK_MOUSE_IN, /**< Mouse In Event */ EVAS_CALLBACK_MOUSE_OUT, /**< Mouse Out Event */ EVAS_CALLBACK_MOUSE_DOWN, /**< Mouse Button Down Event */ @@ -67,10 +71,20 @@ typedef enum _Evas_Callback_Type EVAS_CALLBACK_CHANGED_SIZE_HINTS, /**< Size hints changed event */ EVAS_CALLBACK_IMAGE_PRELOADED, /**< Image as been preloaded */ + + /* + * The following events are only for use with canvas + * evas_event_callback_add(): + */ + EVAS_CALLBACK_CANVAS_FOCUS_IN, /**< Canvas got focus as a whole */ EVAS_CALLBACK_CANVAS_FOCUS_OUT, /**< Canvas lost focus as a whole */ EVAS_CALLBACK_RENDER_FLUSH_PRE, /**< Called just before rendering is updated on the canvas target */ EVAS_CALLBACK_RENDER_FLUSH_POST, /**< Called just after rendering is updated on the canvas target */ + + + + /* the following id no event number, but a sentinel: */ EVAS_CALLBACK_LAST /**< keep as last element/sentinel -- not really an event */ } Evas_Callback_Type; /**< The type of event to trigger the callback */ @@ -712,7 +726,8 @@ typedef enum _Evas_Object_Pointer_Mode } Evas_Object_Pointer_Mode; typedef void (*Evas_Smart_Cb) (void *data, Evas_Object *obj, void *event_info); -typedef void (*Evas_Event_Cb) (void *data, Evas *e, Evas_Object *obj, void *event_info); +typedef void (*Evas_Event_Cb) (void *data, Evas *e, void *event_info); +typedef void (*Evas_Object_Event_Cb) (void *data, Evas *e, Evas_Object *obj, void *event_info); #ifdef __cplusplus extern "C" { @@ -1246,9 +1261,9 @@ extern "C" { EAPI void evas_object_precise_is_inside_set (Evas_Object *obj, Eina_Bool precise) EINA_ARG_NONNULL(1); EAPI Eina_Bool evas_object_precise_is_inside_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; - EAPI void evas_object_event_callback_add (Evas_Object *obj, Evas_Callback_Type type, Evas_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 3); - EAPI void *evas_object_event_callback_del (Evas_Object *obj, Evas_Callback_Type type, Evas_Event_Cb func) EINA_ARG_NONNULL(1, 3); - EAPI void *evas_object_event_callback_del_full(Evas_Object *obj, Evas_Callback_Type type, Evas_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 3); + EAPI void evas_object_event_callback_add (Evas_Object *obj, Evas_Callback_Type type, Evas_Object_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 3); + EAPI void *evas_object_event_callback_del (Evas_Object *obj, Evas_Callback_Type type, Evas_Object_Event_Cb func) EINA_ARG_NONNULL(1, 3); + EAPI void *evas_object_event_callback_del_full(Evas_Object *obj, Evas_Callback_Type type, Evas_Object_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 3); EAPI void evas_event_callback_add (Evas *e, Evas_Callback_Type type, Evas_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 3); EAPI void *evas_event_callback_del (Evas *e, Evas_Callback_Type type, Evas_Event_Cb func) EINA_ARG_NONNULL(1, 3); diff --git a/legacy/evas/src/lib/canvas/evas_callbacks.c b/legacy/evas/src/lib/canvas/evas_callbacks.c index 8e8f230786..6750a85a59 100644 --- a/legacy/evas/src/lib/canvas/evas_callbacks.c +++ b/legacy/evas/src/lib/canvas/evas_callbacks.c @@ -61,7 +61,7 @@ void evas_event_callback_call(Evas *e, Evas_Callback_Type type, void *event_info) { Eina_Inlist **l_mod = NULL, *l; - + _evas_walk(e); if (e->callbacks) { @@ -74,8 +74,9 @@ evas_event_callback_call(Evas *e, Evas_Callback_Type type, void *event_info) fn = (Evas_Func_Node *)l; if ((fn->type == type) && (!fn->delete_me)) { - if (fn->func) - fn->func(fn->data, e, NULL, event_info); + Evas_Event_Cb func = fn->func; + if (func) + func(fn->data, e, event_info); } if (e->delete_me) break; } @@ -140,8 +141,9 @@ evas_object_event_callback_call(Evas_Object *obj, Evas_Callback_Type type, void fn = (Evas_Func_Node *)l; if ((fn->type == type) && (!fn->delete_me)) { - if (fn->func) - fn->func(fn->data, obj->layer->evas, obj, event_info); + Evas_Object_Event_Cb func = fn->func; + if (func) + func(fn->data, obj->layer->evas, obj, event_info); } if (obj->delete_me) break; } @@ -355,7 +357,7 @@ evas_object_event_callback_call(Evas_Object *obj, Evas_Callback_Type type, void * @endcode */ EAPI void -evas_object_event_callback_add(Evas_Object *obj, Evas_Callback_Type type, void (*func) (void *data, Evas *e, Evas_Object *obj, void *event_info), const void *data) +evas_object_event_callback_add(Evas_Object *obj, Evas_Callback_Type type, Evas_Object_Event_Cb func, const void *data) { /* MEM OK */ Evas_Func_Node *fn; @@ -408,7 +410,7 @@ evas_object_event_callback_add(Evas_Object *obj, Evas_Callback_Type type, void ( * @endcode */ EAPI void * -evas_object_event_callback_del(Evas_Object *obj, Evas_Callback_Type type, void (*func) (void *data, Evas *e, Evas_Object *obj, void *event_info)) +evas_object_event_callback_del(Evas_Object *obj, Evas_Callback_Type type, Evas_Object_Event_Cb func) { /* MEM OK */ Evas_Func_Node *fn; @@ -465,7 +467,7 @@ evas_object_event_callback_del(Evas_Object *obj, Evas_Callback_Type type, void ( * @endcode */ EAPI void * -evas_object_event_callback_del_full(Evas_Object *obj, Evas_Callback_Type type, void (*func) (void *data, Evas *e, Evas_Object *obj, void *event_info), const void *data) +evas_object_event_callback_del_full(Evas_Object *obj, Evas_Callback_Type type, Evas_Object_Event_Cb func, const void *data) { /* MEM OK */ Evas_Func_Node *fn; @@ -496,7 +498,7 @@ evas_object_event_callback_del_full(Evas_Object *obj, Evas_Callback_Type type, v } EAPI void -evas_event_callback_add(Evas *e, Evas_Callback_Type type, void (*func) (void *data, Evas *e, Evas_Object *obj, void *event_info), const void *data) +evas_event_callback_add(Evas *e, Evas_Callback_Type type, Evas_Event_Cb func, const void *data) { /* MEM OK */ Evas_Func_Node *fn; @@ -525,7 +527,7 @@ evas_event_callback_add(Evas *e, Evas_Callback_Type type, void (*func) (void *da } EAPI void * -evas_event_callback_del(Evas *e, Evas_Callback_Type type, void (*func) (void *data, Evas *e, Evas_Object *obj, void *event_info)) +evas_event_callback_del(Evas *e, Evas_Callback_Type type, Evas_Event_Cb func) { /* MEM OK */ Evas_Func_Node *fn; @@ -554,7 +556,7 @@ evas_event_callback_del(Evas *e, Evas_Callback_Type type, void (*func) (void *da } EAPI void * -evas_event_callback_del_full(Evas *e, Evas_Callback_Type type, void (*func) (void *data, Evas *e, Evas_Object *obj, void *event_info), const void *data) +evas_event_callback_del_full(Evas *e, Evas_Callback_Type type, Evas_Event_Cb func, const void *data) { /* MEM OK */ Evas_Func_Node *fn; diff --git a/legacy/evas/src/lib/include/evas_private.h b/legacy/evas/src/lib/include/evas_private.h index 0c64e7dafb..6522a91b90 100644 --- a/legacy/evas/src/lib/include/evas_private.h +++ b/legacy/evas/src/lib/include/evas_private.h @@ -490,7 +490,7 @@ struct _Evas_Object struct _Evas_Func_Node { EINA_INLIST; - void (*func) (void *data, Evas *e, Evas_Object *obj, void *event_info); + void (*func) (); void *data; Evas_Callback_Type type; unsigned char delete_me : 1;