forked from enlightenment/enlightenment
parent
5c33ead53a
commit
7ce12cd800
|
@ -25,7 +25,6 @@
|
||||||
|
|
||||||
/* local subsystem data types */
|
/* local subsystem data types */
|
||||||
typedef struct _E_Menu_Category E_Menu_Category;
|
typedef struct _E_Menu_Category E_Menu_Category;
|
||||||
typedef struct _E_Menu_Category_Callback E_Menu_Category_Callback;
|
|
||||||
|
|
||||||
struct _E_Menu_Category
|
struct _E_Menu_Category
|
||||||
{
|
{
|
||||||
|
@ -33,13 +32,6 @@ struct _E_Menu_Category
|
||||||
Evas_List *callbacks;
|
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 */
|
/* local subsystem functions */
|
||||||
static void _e_menu_free (E_Menu *m);
|
static void _e_menu_free (E_Menu *m);
|
||||||
static void _e_menu_item_free (E_Menu_Item *mi);
|
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);
|
evas_stringshare_del(m->category);
|
||||||
m->category = NULL;
|
m->category = NULL;
|
||||||
}
|
}
|
||||||
if (category) m->category = evas_stringshare_add(category);
|
if (category)
|
||||||
else m->category = NULL;
|
m->category = evas_stringshare_add(category);
|
||||||
|
else
|
||||||
|
m->category = NULL;
|
||||||
m->changed = 1;
|
m->changed = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -392,33 +386,54 @@ e_menu_category_data_set(char *category, void *data)
|
||||||
cat = evas_hash_find(_e_menu_categories, category);
|
cat = evas_hash_find(_e_menu_categories, category);
|
||||||
if (cat)
|
if (cat)
|
||||||
cat->data = data;
|
cat->data = data;
|
||||||
/* if it isnt found create the new hash */
|
else /* if it isnt found create the new hash */
|
||||||
else
|
|
||||||
{
|
{
|
||||||
cat = calloc(1, sizeof(E_Menu_Category));
|
cat = calloc(1, sizeof(E_Menu_Category));
|
||||||
cat->data = data;
|
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
|
EAPI E_Menu_Category_Callback *
|
||||||
e_menu_category_callback_set(char *category, void (*create) (E_Menu *m, void *category_data, void *data), void (*free) (void *data), void *data)
|
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 *cat;
|
||||||
E_Menu_Category_Callback *cb;
|
E_Menu_Category_Callback *cb = NULL;
|
||||||
|
|
||||||
cat = evas_hash_find(_e_menu_categories, category);
|
cat = evas_hash_find(_e_menu_categories, category);
|
||||||
/* if it isnt found create the new hash */
|
if (!cat) /* if it isnt found create the new hash */
|
||||||
if (!cat)
|
|
||||||
{
|
{
|
||||||
cat = calloc(1, sizeof(E_Menu_Category));
|
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));
|
if (cat)
|
||||||
cb->data = data;
|
{
|
||||||
cb->create = create;
|
cb = calloc(1, sizeof(E_Menu_Category_Callback));
|
||||||
cb->free = free;
|
if (cb)
|
||||||
cat->callbacks = evas_list_append(cat->callbacks,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
|
EAPI void
|
||||||
|
@ -940,7 +955,7 @@ _e_menu_free(E_Menu *m)
|
||||||
E_Menu_Category_Callback *cb;
|
E_Menu_Category_Callback *cb;
|
||||||
|
|
||||||
cb = l->data;
|
cb = l->data;
|
||||||
if(cb->free) cb->free(cb->data);
|
if(cb->free) cb->free(cb->data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_e_menu_unrealize(m);
|
_e_menu_unrealize(m);
|
||||||
|
@ -1644,7 +1659,7 @@ _e_menu_activate_internal(E_Menu *m, E_Zone *zone)
|
||||||
E_Menu_Category_Callback *cb;
|
E_Menu_Category_Callback *cb;
|
||||||
|
|
||||||
cb = l->data;
|
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;
|
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;
|
Evas_List *l;
|
||||||
E_Menu_Category *cat;
|
E_Menu_Category *cat;
|
||||||
|
|
||||||
cat = (E_Menu_Category *)data;
|
cat = (E_Menu_Category *) data;
|
||||||
l = (Evas_List *)cat->callbacks;
|
l = (Evas_List *) cat->callbacks;
|
||||||
while (l)
|
while (l)
|
||||||
{
|
{
|
||||||
free(l->data); /* free the callback struct */
|
free(l->data); /* free the callback struct */
|
||||||
l = evas_list_remove_list(l,l);
|
l = evas_list_remove_list(l, l);
|
||||||
}
|
}
|
||||||
free(cat);
|
free(cat);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,8 @@
|
||||||
|
|
||||||
typedef struct _E_Menu E_Menu;
|
typedef struct _E_Menu E_Menu;
|
||||||
typedef struct _E_Menu_Item E_Menu_Item;
|
typedef struct _E_Menu_Item E_Menu_Item;
|
||||||
|
typedef struct _E_Menu_Category_Callback E_Menu_Category_Callback;
|
||||||
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#ifndef E_MENU_H
|
#ifndef E_MENU_H
|
||||||
|
@ -130,6 +132,15 @@ struct _E_Menu_Item
|
||||||
unsigned char active : 1;
|
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_init(void);
|
||||||
EAPI int e_menu_shutdown(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 */
|
/* menu categories functions */
|
||||||
EAPI void e_menu_category_set(E_Menu *m, char *category);
|
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_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);
|
EAPI void e_menu_pre_activate_callback_set(E_Menu *m, void (*func) (void *data, E_Menu *m), void *data);
|
||||||
|
|
Loading…
Reference in New Issue