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

Reply via email to