From: <enl...@li...> - 2005-12-18 07:38:31
|
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); |