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_face_menu_init(E_Gadget_Face *face);
|
||||||
static void _e_gadget_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
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 *
|
||||||
e_gadget_new(E_Module *module,
|
e_gadget_new(E_Gadget_Api *api)
|
||||||
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 *gad;
|
E_Gadget *gad;
|
||||||
Evas_List *managers, *l = NULL, *l2 = NULL;
|
Evas_List *managers, *l = NULL, *l2 = NULL;
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
int gadget_count = 0;
|
int gadget_count = 0;
|
||||||
|
|
||||||
|
if (!api || !api->module || !api->name) return NULL;
|
||||||
|
|
||||||
gad = E_OBJECT_ALLOC(E_Gadget, E_GADGET_TYPE, _e_gadget_free);
|
gad = E_OBJECT_ALLOC(E_Gadget, E_GADGET_TYPE, _e_gadget_free);
|
||||||
if (!gad) return NULL;
|
if (!gad) return NULL;
|
||||||
|
|
||||||
gad->module = module;
|
|
||||||
|
gad->module = api->module;
|
||||||
e_object_ref(E_OBJECT(gad->module));
|
e_object_ref(E_OBJECT(gad->module));
|
||||||
|
|
||||||
if(!name) return NULL;
|
gad->name = evas_stringshare_add(api->name);
|
||||||
gad->name = evas_stringshare_add(name);
|
|
||||||
|
|
||||||
gad->funcs.face_init = func_face_init;
|
gad->funcs.face_init = api->func_face_init;
|
||||||
gad->funcs.face_free = func_face_free;
|
gad->funcs.face_free = api->func_face_free;
|
||||||
gad->funcs.change = func_change;
|
gad->funcs.change = api->func_change;
|
||||||
gad->funcs.menu_init = func_menu_init;
|
gad->funcs.menu_init = api->func_menu_init;
|
||||||
gad->funcs.face_menu_init = func_face_menu_init;
|
gad->funcs.face_menu_init = api->func_face_menu_init;
|
||||||
gad->data = data;
|
gad->data = api->data;
|
||||||
|
|
||||||
|
|
||||||
/* get all desktop evases, and call init function on them */
|
/* get all desktop evases, and call init function on them */
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
typedef struct _E_Gadget E_Gadget;
|
typedef struct _E_Gadget E_Gadget;
|
||||||
typedef struct _E_Gadget_Face E_Gadget_Face;
|
typedef struct _E_Gadget_Face E_Gadget_Face;
|
||||||
typedef struct _E_Gadget_Change E_Gadget_Change;
|
typedef struct _E_Gadget_Change E_Gadget_Change;
|
||||||
|
typedef struct _E_Gadget_Api E_Gadget_Api;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#ifndef E_GADGET_H
|
#ifndef E_GADGET_H
|
||||||
|
@ -10,6 +11,18 @@ typedef struct _E_Gadget_Change E_Gadget_Change;
|
||||||
|
|
||||||
#define E_GADGET_TYPE 0xE0b01021
|
#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
|
struct _E_Gadget
|
||||||
{
|
{
|
||||||
E_Object e_obj_inherit;
|
E_Object e_obj_inherit;
|
||||||
|
@ -52,14 +65,7 @@ struct _E_Gadget_Change
|
||||||
E_Gadget_Face *face;
|
E_Gadget_Face *face;
|
||||||
};
|
};
|
||||||
|
|
||||||
E_Gadget *e_gadget_new(E_Module *module,
|
E_Gadget *e_gadget_new(E_Gadget_Api *api);
|
||||||
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);
|
|
||||||
|
|
||||||
void e_gadget_face_theme_set(E_Gadget_Face *face, char *category, char *group);
|
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 *
|
void *
|
||||||
e_modapi_init(E_Module *m)
|
e_modapi_init(E_Module *m)
|
||||||
{
|
{
|
||||||
|
E_Gadget_Api *api = NULL;
|
||||||
E_Gadget *gad = NULL;
|
E_Gadget *gad = NULL;
|
||||||
|
|
||||||
Test *t = E_NEW(Test, 1);
|
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",
|
* set up gadget -- only module and name are required, but the gadget would
|
||||||
_test_face_init,
|
* be pretty useless without func_face_*
|
||||||
_test_face_free,
|
*/
|
||||||
_test_face_change,
|
|
||||||
_test_menu_init,
|
api->module = m;
|
||||||
_test_face_menu_init,
|
api->name = "test_gadget";
|
||||||
t);
|
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;
|
return gad;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue