forked from enlightenment/enlightenment
pass a single struct to e_gadget_new() instead of a ton of functions.
SVN revision: 19107
This commit is contained in:
parent
517eb4c9cf
commit
e3ead0ca7a
|
@ -11,37 +11,55 @@ static void _e_gadget_menu_init(E_Gadget *gad);
|
|||
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 */
|
||||
|
|
|
@ -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 @@ typedef struct _E_Gadget_Change E_Gadget_Change;
|
|||
|
||||
#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 @@ struct _E_Gadget_Change
|
|||
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);
|
||||
|
||||
|
|
|
@ -20,18 +20,29 @@ static void _test_face_menu_init(void *data, E_Gadget_Face *face);
|
|||
void *
|
||||
e_modapi_init(E_Module *m)
|
||||
{
|
||||
E_Gadget_Api *api = NULL;
|
||||
E_Gadget *gad = NULL;
|
||||
|
||||
Test *t = E_NEW(Test, 1);
|
||||
if (!t) return;
|
||||
api = E_NEW(E_Gadget_Api, 1);
|
||||
if (!api) return;
|
||||
|
||||
gad = e_gadget_new(m,
|
||||
"test_gadget",
|
||||
_test_face_init,
|
||||
_test_face_free,
|
||||
_test_face_change,
|
||||
_test_menu_init,
|
||||
_test_face_menu_init,
|
||||
t);
|
||||
/*
|
||||
* set up gadget -- only module and name are required, but the gadget would
|
||||
* be pretty useless without func_face_*
|
||||
*/
|
||||
|
||||
api->module = m;
|
||||
api->name = "test_gadget";
|
||||
api->func_face_init = _test_face_init;
|
||||
api->func_face_free = _test_face_free;
|
||||
api->func_change = _test_face_change;
|
||||
api->func_menu_init = _test_menu_init;
|
||||
api->func_face_menu_init = _test_face_menu_init;
|
||||
api->data = t;
|
||||
|
||||
gad = e_gadget_new(api);
|
||||
|
||||
return gad;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue