Enlightenment CVS committal

Author  : sebastid
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_menu.c 


Log Message:
Keep track of active menu and active menu item.

===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_menu.c,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -3 -r1.55 -r1.56
--- e_menu.c    28 Jul 2006 23:22:57 -0000      1.55
+++ e_menu.c    9 Aug 2006 13:52:52 -0000       1.56
@@ -86,6 +86,8 @@
 /* local subsystem globals */
 static Ecore_X_Window       _e_menu_win                 = 0;
 static Evas_List           *_e_active_menus             = NULL;
+static E_Menu              *_e_active_menu              = NULL;
+static E_Menu_Item         *_e_active_menu_item         = NULL;
 /*static Evas_Hash        *_e_menu_category_items      = NULL;*/
 static Evas_Hash          *_e_menu_categories          = NULL;
 static Ecore_X_Time         _e_menu_activate_time       = 0;
@@ -143,6 +145,7 @@
        e_object_unref(E_OBJECT(m));
      }
    _e_active_menus = NULL;
+   _e_active_menu = NULL;
    if (_e_menu_categories)
      {
        evas_hash_foreach(_e_menu_categories, _e_menu_categories_free_cb, NULL);
@@ -500,7 +503,7 @@
    E_OBJECT_CHECK_RETURN(m, NULL);
    E_OBJECT_TYPE_CHECK_RETURN(m, E_MENU_TYPE, NULL);
    ret = m;
-   while (ret->parent_item && ret->parent_item->menu)
+   while ((ret->parent_item) && (ret->parent_item->menu))
      {
        ret = ret->parent_item->menu;
      }
@@ -772,7 +775,7 @@
    E_OBJECT_CHECK(mi);
    E_OBJECT_TYPE_CHECK(mi, E_MENU_ITEM_TYPE);
    if (mi->separator) return;
-   if (active)
+   if ((active) && (!mi->active))
      {
        E_Menu_Item *pmi;
        
@@ -780,6 +783,8 @@
        if (mi == pmi) return;
        if (pmi) e_menu_item_active_set(pmi, 0);
        mi->active = 1;
+       _e_active_menu = mi->menu;
+       _e_active_menu_item = mi;
        if (mi->bg_object)
          edje_object_signal_emit(mi->bg_object, "active", "");
        if (mi->icon_bg_object)
@@ -795,9 +800,11 @@
        edje_object_signal_emit(mi->menu->bg_object, "active", "");
        _e_menu_submenu_activate(mi);
      }
-   else
+   else if ((!active) && (mi->active))
      {
        mi->active = 0;
+       _e_active_menu = NULL;
+       _e_active_menu_item = NULL;
        if (mi->bg_object)
          edje_object_signal_emit(mi->bg_object, "passive", "");
        if (mi->icon_bg_object)
@@ -998,18 +1005,19 @@
    Evas_List *l, *tmp;
    E_Menu_Category *cat;
    
+   if (m == _e_active_menu) _e_active_menu = NULL;
    /* the foreign menu items */
    cat = evas_hash_find(_e_menu_categories, m->category);
-   if(cat)
-   {
-       for(l = cat->callbacks; l; l = l->next)
-       {
-               E_Menu_Category_Callback *cb;
-
-               cb = l->data;
-               if(cb->free)   cb->free(cb->data);
-       }
-   }
+   if (cat)
+     {
+       for (l = cat->callbacks; l; l = l->next)
+         {
+            E_Menu_Category_Callback *cb;
+
+            cb = l->data;
+            if (cb->free) cb->free(cb->data);
+         }
+     }
    _e_menu_unrealize(m);
    E_FREE(m->shape_rects);
    m->shape_rects_num = 0;
@@ -1033,6 +1041,7 @@
 static void
 _e_menu_item_free(E_Menu_Item *mi)
 {
+   if (mi == _e_active_menu_item) _e_active_menu_item = NULL;
    if (mi->submenu)
      {
        mi->submenu->parent_item = NULL;
@@ -1838,31 +1847,19 @@
 static int
 _e_menu_active_call(void)
 {
-   Evas_List *l, *ll;
+   E_Menu_Item *mi;
 
-   /* FIXME: inefficient. should track current menu and active item */
-   for (l = _e_active_menus; l; l = l->next)
+   mi = _e_menu_item_active_get();
+   if (mi)
      {
-       E_Menu *m;
-       
-       m = l->data;
-       for (ll = m->items; ll; ll = ll->next)
-         {
-            E_Menu_Item *mi;
-            
-            mi = ll->data;
-            if (mi->active)
-              {
-                 if (mi->submenu) return 0;
-                 if (mi->check)
-                   e_menu_item_toggle_set(mi, !mi->toggle);
-                 if ((mi->radio) && (!e_menu_item_toggle_get(mi)))
-                   e_menu_item_toggle_set(mi, 1);
-                 if (mi->cb.func)
-                   mi->cb.func(mi->cb.data, m, mi);
-                 return 1;
-              }
-         }
+       if (mi->submenu) return 0;
+       if (mi->check)
+         e_menu_item_toggle_set(mi, !mi->toggle);
+       if ((mi->radio) && (!e_menu_item_toggle_get(mi)))
+         e_menu_item_toggle_set(mi, 1);
+       if (mi->cb.func)
+         mi->cb.func(mi->cb.data, mi->menu, mi);
+       return 1;
      }
    return -1;
 }
@@ -1872,7 +1869,7 @@
 {
    E_Menu *m;
 
-   /* FIXME: inefficient. should track current menu and active item */
+   /* FIXME: inefficient. should track active item */
    m = _e_menu_active_get();
    if (m)
      {
@@ -1931,7 +1928,7 @@
 {
    E_Menu *m;
 
-   /* FIXME: inefficient. should track current menu and active item */
+   /* FIXME: inefficient. should track active item */
    m = _e_menu_active_get();
    if (m)
      {
@@ -1992,7 +1989,6 @@
    Evas_List *ll;
    E_Menu_Item *mi;
 
-   /* FIXME: inefficient. should track current menu and active item */
    m = _e_menu_active_get();
    if (m)
      {
@@ -2018,7 +2014,6 @@
    Evas_List *ll;
    E_Menu_Item *mi;
 
-   /* FIXME: inefficient. should track current menu and active item */
    m = _e_menu_active_get();
    if (m)
      {
@@ -2182,45 +2177,13 @@
 static E_Menu *
 _e_menu_active_get(void)
 {
-   Evas_List *l, *ll;
-
-   /* FIXME: inefficient. should track current menu and active item */
-   for (l = _e_active_menus; l; l = l->next)
-     {
-       E_Menu *m;
-       
-       m = l->data;
-       for (ll = m->items; ll; ll = ll->next)
-         {
-            E_Menu_Item *mi;
-            
-            mi = ll->data;
-            if (mi->active) return m;
-         }
-     }
-   return NULL;
+   return _e_active_menu;
 }
 
 static E_Menu_Item *
 _e_menu_item_active_get(void)
 {
-   Evas_List *l, *ll;
-
-   /* FIXME: inefficient. should track current menu and active item */
-   for (l = _e_active_menus; l; l = l->next)
-     {
-       E_Menu *m;
-       
-       m = l->data;
-       for (ll = m->items; ll; ll = ll->next)
-         {
-            E_Menu_Item *mi;
-            
-            mi = ll->data;
-            if (mi->active) return mi;
-         }
-     }
-   return NULL;
+   return _e_active_menu_item;
 }
 
 static int



-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to