Enlightenment CVS committal Author : rephorm Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_gadget.c e_gadget.h Log Message: pass a single struct to e_gadget_new() instead of a ton of functions. =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_gadget.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- e_gadget.c 3 Dec 2005 15:39:25 -0000 1.2 +++ e_gadget.c 18 Dec 2005 07:37:53 -0000 1.3 @@ -11,37 +11,55 @@ static void _e_gadget_face_menu_init(E_Gadget_Face *face); static void _e_gadget_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info); - +/** + * Create a new gadget. Takes an E_Gadget_Api struct. + * The module and name fields of the api struct are required. The rest are + * optional, however in order to be useful, at least func_face_init and + * func_face_free should be defined. The possible fields api fields are: + * + * E_Module *module - the module that contains this gadget + * char *name - a unique name for this module + * void (*func_face_init) (void *data, E_Gadget_Face *gadget_face) - + * A function that initializes the gadget's face. All evas objects should + * be drawn on gadget_face->evas. + * void (*func_face_free) (void *data, E_Gadget_Face *gadget_face) - + * A function that frees all memory allocated in func_face_init + * void (*func_change) (void *data, E_Gadget_Face *gadget_face, + * E_Gadman_Client *gmc, E_Gadman_Change change) - + * A function that is called whenever the gadget is resized. + * void (*func_menu_init) (void *data, E_Gadget *gadget) - + * A function that initializes the gadget's main menu. + * void (*func_face_menu_init) (void *data, E_Gadget_Face *gadget_face) - + * A function that initializes the gadget's face menu. This is displayed + * when the user right clicks on the gadget's face. + * void *data - a pointer to some data to be passed to all callbacks. + * + */ E_Gadget * -e_gadget_new(E_Module *module, - const char *name, - void (*func_face_init) (void *data, E_Gadget_Face *gadget_face), - void (*func_face_free) (void *data, E_Gadget_Face *gadget_face), - void (*func_change) (void *data, E_Gadget_Face *gadget_face, E_Gadman_Client *gmc, E_Gadman_Change change), - void (*func_menu_init) (void *data, E_Gadget *gadget), - void (*func_face_menu_init) (void *data, E_Gadget_Face *gadget_face), - void *data) +e_gadget_new(E_Gadget_Api *api) { E_Gadget *gad; Evas_List *managers, *l = NULL, *l2 = NULL; char buf[1024]; int gadget_count = 0; + if (!api || !api->module || !api->name) return NULL; + gad = E_OBJECT_ALLOC(E_Gadget, E_GADGET_TYPE, _e_gadget_free); if (!gad) return NULL; - gad->module = module; + + gad->module = api->module; e_object_ref(E_OBJECT(gad->module)); - if(!name) return NULL; - gad->name = evas_stringshare_add(name); + gad->name = evas_stringshare_add(api->name); - gad->funcs.face_init = func_face_init; - gad->funcs.face_free = func_face_free; - gad->funcs.change = func_change; - gad->funcs.menu_init = func_menu_init; - gad->funcs.face_menu_init = func_face_menu_init; - gad->data = data; + gad->funcs.face_init = api->func_face_init; + gad->funcs.face_free = api->func_face_free; + gad->funcs.change = api->func_change; + gad->funcs.menu_init = api->func_menu_init; + gad->funcs.face_menu_init = api->func_face_menu_init; + gad->data = api->data; /* get all desktop evases, and call init function on them */ =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_gadget.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- e_gadget.h 1 Dec 2005 04:07:27 -0000 1.1 +++ e_gadget.h 18 Dec 2005 07:37:53 -0000 1.2 @@ -3,6 +3,7 @@ typedef struct _E_Gadget E_Gadget; typedef struct _E_Gadget_Face E_Gadget_Face; typedef struct _E_Gadget_Change E_Gadget_Change; +typedef struct _E_Gadget_Api E_Gadget_Api; #else #ifndef E_GADGET_H @@ -10,6 +11,18 @@ #define E_GADGET_TYPE 0xE0b01021 +struct _E_Gadget_Api +{ + E_Module *module; + const char *name; + void (*func_face_init) (void *data, E_Gadget_Face *gadget_face); + void (*func_face_free) (void *data, E_Gadget_Face *gadget_face); + void (*func_change) (void *data, E_Gadget_Face *gadget_face, E_Gadman_Client *gmc, E_Gadman_Change change); + void (*func_menu_init) (void *data, E_Gadget *gadget); + void (*func_face_menu_init) (void *data, E_Gadget_Face *gadget_face); + void *data; +}; + struct _E_Gadget { E_Object e_obj_inherit; @@ -52,14 +65,7 @@ E_Gadget_Face *face; }; -E_Gadget *e_gadget_new(E_Module *module, - const char *name, - void (*func_face_init) (void *data, E_Gadget_Face *gadget_face), - void (*func_face_free) (void *data, E_Gadget_Face *gadget_face), - void (*func_change) (void *data, E_Gadget_Face *gadget_face, E_Gadman_Client *gmc, E_Gadman_Change change), - void (*func_menu_init) (void *data, E_Gadget *gadget), - void (*func_face_menu_init) (void *data, E_Gadget_Face *gadget_face), - void *data); +E_Gadget *e_gadget_new(E_Gadget_Api *api); void e_gadget_face_theme_set(E_Gadget_Face *face, char *category, char *group); ------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Do you grep through log files for problems? Stop! Download the new AJAX search engine that makes searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs