fangies work!

SVN revision: 19658
This commit is contained in:
Carsten Haitzler 2006-01-08 16:38:01 +00:00
parent 5c33ead53a
commit 7ce12cd800
2 changed files with 57 additions and 31 deletions

View File

@ -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 @@ struct _E_Menu_Category
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 @@ e_menu_category_set(E_Menu *m, char *category)
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 @@ e_menu_category_data_set(char *category, void *data)
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_free(E_Menu *m)
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_activate_internal(E_Menu *m, E_Zone *zone)
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 @@ _e_menu_categories_free_cb(Evas_Hash *hash, const char *key, void *data, void *f
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;
}

View File

@ -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 @@ struct _E_Menu_Item
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 @@ EAPI void e_menu_icon_file_set(E_Menu *m, char *icon);
/* 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);