API break: proper Canvas events callback.
authorbarbieri <barbieri@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 16 Feb 2010 12:59:37 +0000 (12:59 +0000)
committerbarbieri <barbieri@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 16 Feb 2010 12:59:37 +0000 (12:59 +0000)
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.

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@46206 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/Evas.h
src/lib/canvas/evas_callbacks.c
src/lib/include/evas_private.h

index b82d6bd..2c8899f 100644 (file)
 
 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);
index 8e8f230..6750a85 100644 (file)
@@ -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;
index 0c64e7d..6522a91 100644 (file)
@@ -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;