Enlightenment CVS committal Author : sebastid Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_menu.h e_menu.c Log Message: Add hooks to support submenus on the fly. =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_menu.h,v retrieving revision 1.10 retrieving revision 1.11 diff -u -3 -r1.10 -r1.11 --- e_menu.h 13 Apr 2005 15:52:33 -0000 1.10 +++ e_menu.h 21 Apr 2005 07:19:49 -0000 1.11 @@ -107,7 +107,17 @@ void *data; void (*func) (void *data, E_Menu *m, E_Menu_Item *mi); } cb; - + + struct { + void *data; + void (*func) (void *data, E_Menu *m, E_Menu_Item *mi); + } submenu_pre_cb; + + struct { + void *data; + void (*func) (void *data, E_Menu *m, E_Menu_Item *mi); + } submenu_post_cb; + unsigned char separator : 1; unsigned char radio : 1; unsigned char check : 1; @@ -147,6 +157,8 @@ EAPI void e_menu_item_toggle_set(E_Menu_Item *mi, int tog); EAPI int e_menu_item_toggle_get(E_Menu_Item *mi); EAPI void e_menu_item_callback_set(E_Menu_Item *mi, void (*func) (void *data, E_Menu *m, E_Menu_Item *mi), void *data); +EAPI void e_menu_item_submenu_pre_callback_set(E_Menu_Item *mi, void (*func) (void *data, E_Menu *m, E_Menu_Item *mi), void *data); +EAPI void e_menu_item_submenu_post_callback_set(E_Menu_Item *mi, void (*func) (void *data, E_Menu *m, E_Menu_Item *mi), void *data); EAPI void e_menu_item_active_set(E_Menu_Item *mi, int active); EAPI void e_menu_idler_before(void); =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_menu.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -3 -r1.16 -r1.17 --- e_menu.c 13 Apr 2005 15:52:33 -0000 1.16 +++ e_menu.c 21 Apr 2005 07:19:49 -0000 1.17 @@ -67,6 +67,8 @@ static int _e_menu_cb_scroll_timer (void *data); static int _e_menu_cb_window_shape (void *data, int ev_type, void *ev); +static void _e_menu_item_submenu_post_cb_default(void *data, E_Menu *m, E_Menu_Item *mi); + /* local subsystem globals */ static Ecore_X_Window _e_menu_win = 0; static Evas_List *_e_active_menus = NULL; @@ -501,6 +503,26 @@ } void +e_menu_item_submenu_pre_callback_set(E_Menu_Item *mi, void (*func) (void *data, E_Menu *m, E_Menu_Item *mi), void *data) +{ + E_OBJECT_CHECK(mi); + E_OBJECT_TYPE_CHECK(mi, E_MENU_ITEM_TYPE); + mi->submenu_pre_cb.func = func; + mi->submenu_pre_cb.data = data; + if (!mi->submenu_post_cb.func) + mi->submenu_post_cb.func = _e_menu_item_submenu_post_cb_default; +} + +void +e_menu_item_submenu_post_callback_set(E_Menu_Item *mi, void (*func) (void *data, E_Menu *m, E_Menu_Item *mi), void *data) +{ + E_OBJECT_CHECK(mi); + E_OBJECT_TYPE_CHECK(mi, E_MENU_ITEM_TYPE); + mi->submenu_post_cb.func = func; + mi->submenu_post_cb.data = data; +} + +void e_menu_item_active_set(E_Menu_Item *mi, int active) { E_OBJECT_CHECK(mi); @@ -1436,6 +1458,8 @@ } mi->menu->pending_new_submenu = 0; _e_menu_deactivate_above(mi->menu); + if (mi->submenu_pre_cb.func) + mi->submenu_pre_cb.func(mi->submenu_pre_cb.data, mi->menu, mi); if (mi->submenu) { E_Menu *m; @@ -1447,6 +1471,8 @@ _e_menu_reposition(m); e_object_unref(E_OBJECT(m)); } + if (mi->submenu_post_cb.func) + mi->submenu_post_cb.func(mi->submenu_post_cb.data, mi->menu, mi); } static void @@ -2185,3 +2211,15 @@ } return 1; } + +static void +_e_menu_item_submenu_post_cb_default(void *data, E_Menu *m, E_Menu_Item *mi) +{ + E_Menu *subm; + + if (!mi->submenu) return; + + subm = mi->submenu; + e_menu_item_submenu_set(mi, NULL); + e_object_del(E_OBJECT(subm)); +} ------------------------------------------------------- This SF.Net email is sponsored by: New Crystal Reports XI. Version 11 adds new functionality designed to reduce time involved in creating, integrating, and deploying reporting solutions. Free runtime info, new features, or free trial, at: http://www.businessobjects.com/devxi/728 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs