Hi,

as you might know, I'm working on Vala bindings for EFL 
(http://git.freesmartphone.org/?p=libeflvala.git;a=tree;f=vapi). To generate 
proper C code, Vala requires function pointers to have types -- anonymous 
callbacks won't do. Here are my first two commits to retrofit these. Ok to 
commit?

Cheers,

:M:

	This adds typedefs for some callbacks. This is necessary for
	Vala bindings, since Vala does not work with anonymous functions.
	
	Signed-off-By: Michael 'Mickey' Lauer <mla...@vanille-media.de>

Index: src/lib/Edje.h
===================================================================
--- src/lib/Edje.h	(Revision 41406)
+++ src/lib/Edje.h	(Arbeitskopie)
@@ -162,6 +162,10 @@
      EDJE_LOAD_ERROR_RECURSIVE_REFERENCE = 9
 };
 
+typedef void (*Edje_Signal_Cb) (void *data, Evas_Object *obj, const char *emission, const char *source);
+typedef void (*Edje_Text_Change_Cb) (void *data, Evas_Object *obj, const char *part);
+typedef void (*Edje_Message_Handler_Cb) (void *data, Evas_Object *obj, Edje_Message_Type type, int id, void *msg);
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -222,8 +226,8 @@
    EAPI const char  *edje_load_error_str             (int error);
 
    /* edje_program.c */
-   EAPI void         edje_object_signal_callback_add (Evas_Object *obj, const char *emission, const char *source, void (*func) (void *data, Evas_Object *obj, const char *emission, const char *source), void *data);
-   EAPI void        *edje_object_signal_callback_del (Evas_Object *obj, const char *emission, const char *source, void (*func) (void *data, Evas_Object *obj, const char *emission, const char *source));
+   EAPI void         edje_object_signal_callback_add (Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func, void *data);
+   EAPI void        *edje_object_signal_callback_del (Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func);
    EAPI void         edje_object_signal_emit         (Evas_Object *obj, const char *emission, const char *source);
    EAPI void         edje_object_play_set            (Evas_Object *obj, int play);
    EAPI int          edje_object_play_get            (const Evas_Object *obj);
@@ -244,7 +248,7 @@
    EAPI int          edje_object_part_exists         (const Evas_Object *obj, const char *part);
    EAPI const Evas_Object *edje_object_part_object_get     (const Evas_Object *obj, const char *part);
    EAPI void         edje_object_part_geometry_get   (const Evas_Object *obj, const char *part, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
-   EAPI void         edje_object_text_change_cb_set  (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, const char *part), void *data);
+   EAPI void         edje_object_text_change_cb_set  (Evas_Object *obj, Edje_Text_Change_Cb func, void *data);
    EAPI void         edje_object_part_text_set       (Evas_Object *obj, const char *part, const char *text);
    EAPI const char  *edje_object_part_text_get       (const Evas_Object *obj, const char *part);
    EAPI void         edje_object_part_text_unescaped_set(Evas_Object *obj, const char *part, const char *text_to_escape);
@@ -290,7 +294,7 @@
 
    /* edje_message_queue.c */
    EAPI void         edje_object_message_send           (Evas_Object *obj, Edje_Message_Type type, int id, void *msg);
-   EAPI void         edje_object_message_handler_set    (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, Edje_Message_Type type, int id, void *msg), void *data);
+   EAPI void         edje_object_message_handler_set    (Evas_Object *obj, Edje_Message_Handler_Cb func, void *data);
    EAPI void         edje_object_message_signal_process (Evas_Object *obj);
 
    EAPI void         edje_message_signal_process        (void);
Index: src/lib/Evas.h
===================================================================
--- src/lib/Evas.h	(Revision 41406)
+++ src/lib/Evas.h	(Arbeitskopie)
@@ -448,6 +448,8 @@
    EVAS_OBJECT_POINTER_MODE_NOGRAB
 } Evas_Object_Pointer_Mode;
 
+typedef void (*Evas_Smart_Cb) (void *data, Evas_Object *obj, void *event_info);
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -852,8 +854,8 @@
    EAPI Evas_Smart       *evas_object_smart_smart_get       (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
    EAPI void             *evas_object_smart_data_get        (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
    EAPI void              evas_object_smart_data_set        (Evas_Object *obj, void *data) EINA_ARG_NONNULL(1);
-   EAPI void              evas_object_smart_callback_add    (Evas_Object *obj, const char *event, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data) EINA_ARG_NONNULL(1, 2, 3);
-   EAPI void             *evas_object_smart_callback_del    (Evas_Object *obj, const char *event, void (*func) (void *data, Evas_Object *obj, void *event_info)) EINA_ARG_NONNULL(1, 2, 3);
+   EAPI void              evas_object_smart_callback_add    (Evas_Object *obj, const char *event, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1, 2, 3);
+   EAPI void             *evas_object_smart_callback_del    (Evas_Object *obj, const char *event, Evas_Smart_Cb func) EINA_ARG_NONNULL(1, 2, 3);
    EAPI void              evas_object_smart_callback_call   (Evas_Object *obj, const char *event, void *event_info) EINA_ARG_NONNULL(1, 2);
    EAPI void              evas_object_smart_changed         (Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void              evas_object_smart_need_recalculate_set(Evas_Object *obj, Eina_Bool value) EINA_ARG_NONNULL(1);
------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time, 
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to