Enlightenment CVS committal Author : raster Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_menu.c e_menu.h Log Message: fangies work! =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_menu.c,v retrieving revision 1.46 retrieving revision 1.47 diff -u -3 -r1.46 -r1.47 --- e_menu.c 7 Jan 2006 17:38:13 -0000 1.46 +++ e_menu.c 8 Jan 2006 16:38:01 -0000 1.47 @@ -25,7 +25,6 @@ /* local subsystem data types */ typedef struct _E_Menu_Category E_Menu_Category; -typedef struct _E_Menu_Category_Callback E_Menu_Category_Callback; struct _E_Menu_Category { @@ -33,13 +32,6 @@ Evas_List *callbacks; }; -struct _E_Menu_Category_Callback -{ - void *data; - void (*create) (E_Menu *m, void *category_data, void *data); - void (*free) (void *data); -}; - /* local subsystem functions */ static void _e_menu_free (E_Menu *m); static void _e_menu_item_free (E_Menu_Item *mi); @@ -379,8 +371,10 @@ evas_stringshare_del(m->category); m->category = NULL; } - if (category) m->category = evas_stringshare_add(category); - else m->category = NULL; + if (category) + m->category = evas_stringshare_add(category); + else + m->category = NULL; m->changed = 1; } @@ -392,33 +386,54 @@ cat = evas_hash_find(_e_menu_categories, category); if (cat) cat->data = data; - /* if it isnt found create the new hash */ - else + else /* if it isnt found create the new hash */ { cat = calloc(1, sizeof(E_Menu_Category)); cat->data = data; - _e_menu_categories = evas_hash_add(_e_menu_categories,category,cat); + _e_menu_categories = evas_hash_add(_e_menu_categories, category, cat); } } -EAPI void -e_menu_category_callback_set(char *category, void (*create) (E_Menu *m, void *category_data, void *data), void (*free) (void *data), void *data) +EAPI E_Menu_Category_Callback * +e_menu_category_callback_add(char *category, void (*create) (E_Menu *m, void *category_data, void *data), void (*free) (void *data), void *data) { E_Menu_Category *cat; - E_Menu_Category_Callback *cb; + E_Menu_Category_Callback *cb = NULL; cat = evas_hash_find(_e_menu_categories, category); - /* if it isnt found create the new hash */ - if (!cat) + if (!cat) /* if it isnt found create the new hash */ { cat = calloc(1, sizeof(E_Menu_Category)); - _e_menu_categories = evas_hash_add(_e_menu_categories,category,cat); + _e_menu_categories = evas_hash_add(_e_menu_categories, category, cat); } - cb = calloc(1, sizeof(E_Menu_Category_Callback)); - cb->data = data; - cb->create = create; - cb->free = free; - cat->callbacks = evas_list_append(cat->callbacks,cb); + if (cat) + { + cb = calloc(1, sizeof(E_Menu_Category_Callback)); + if (cb) + { + cb->data = data; + cb->create = create; + cb->free = free; + cb->category = evas_stringshare_add(category); + cat->callbacks = evas_list_append(cat->callbacks, cb); + } + } + return cb; +} + +EAPI void +e_menu_category_callback_del(E_Menu_Category_Callback *cb) +{ + E_Menu_Category *cat; + + if (cb) + { + cat = evas_hash_find(_e_menu_categories, cb->category); + if (cat) + cat->callbacks = evas_list_remove(cat->callbacks, cb); + evas_stringshare_del(cb->category); + free(cb); + } } EAPI void @@ -940,7 +955,7 @@ E_Menu_Category_Callback *cb; cb = l->data; - if(cb->free) cb->free(cb->data); + if(cb->free) cb->free(cb->data); } } _e_menu_unrealize(m); @@ -1644,7 +1659,7 @@ E_Menu_Category_Callback *cb; cb = l->data; - if(cb->create) cb->create(m,cat->data,cb->data); + if(cb->create) cb->create(m, cat->data, cb->data); } } m->cur.visible = 1; @@ -2609,14 +2624,13 @@ Evas_List *l; E_Menu_Category *cat; - cat = (E_Menu_Category *)data; - l = (Evas_List *)cat->callbacks; + cat = (E_Menu_Category *) data; + l = (Evas_List *) cat->callbacks; while (l) { free(l->data); /* free the callback struct */ - l = evas_list_remove_list(l,l); + l = evas_list_remove_list(l, l); } free(cat); return 1; } - =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_menu.h,v retrieving revision 1.15 retrieving revision 1.16 diff -u -3 -r1.15 -r1.16 --- e_menu.h 6 Jan 2006 23:45:13 -0000 1.15 +++ e_menu.h 8 Jan 2006 16:38:01 -0000 1.16 @@ -13,6 +13,8 @@ typedef struct _E_Menu E_Menu; typedef struct _E_Menu_Item E_Menu_Item; +typedef struct _E_Menu_Category_Callback E_Menu_Category_Callback; + #else #ifndef E_MENU_H @@ -130,6 +132,15 @@ unsigned char active : 1; }; +struct _E_Menu_Category_Callback +{ + const char *category; + void *data; + void (*create) (E_Menu *m, void *category_data, void *data); + void (*free) (void *data); +}; + + EAPI int e_menu_init(void); EAPI int e_menu_shutdown(void); @@ -146,7 +157,8 @@ /* menu categories functions */ EAPI void e_menu_category_set(E_Menu *m, char *category); EAPI void e_menu_category_data_set(char *category, void *data); -EAPI void e_menu_category_callback_set(char *category, void (*create) (E_Menu *m, void *category_data, void *data), void (free) (void *data), void *data); +EAPI E_Menu_Category_Callback *e_menu_category_callback_add(char *category, void (*create) (E_Menu *m, void *category_data, void *data), void (free) (void *data), void *data); +EAPI void e_menu_category_callback_del(E_Menu_Category_Callback *cb); EAPI void e_menu_pre_activate_callback_set(E_Menu *m, void (*func) (void *data, E_Menu *m), void *data); ------------------------------------------------------- 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