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

Reply via email to