add mechanism for injecting entries into border menus

SVN revision: 74172
This commit is contained in:
Mike Blumenkrantz 2012-07-19 09:05:34 +00:00
parent 224521a152
commit 85931fc15a
3 changed files with 57 additions and 0 deletions

View File

@ -362,6 +362,7 @@ e_border_shutdown(void)
if (borders_hash) eina_hash_free(borders_hash);
borders_hash = NULL;
e_int_border_menu_hooks_clear();
return 1;
}

View File

@ -48,11 +48,55 @@ static void _e_border_menu_cb_iconpref_user(void *data, E_Menu *m, E_Menu_Item *
static void _e_border_menu_cb_default_icon(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_netwm_icon(void *data, E_Menu *m, E_Menu_Item *mi);
static Eina_List *menu_hooks = NULL;
EAPI E_Border_Menu_Hook *
e_int_border_menu_hook_add(E_Border_Menu_Hook_Cb cb, const void *data)
{
E_Border_Menu_Hook *h;
if (!cb) return NULL;
h = E_NEW(E_Border_Menu_Hook, 1);
if (!h) return NULL;
h->cb = cb;
h->data = (void*)data;
menu_hooks = eina_list_append(menu_hooks, h);
return h;
}
EAPI void
e_int_border_menu_hook_del(E_Border_Menu_Hook *hook)
{
E_Border_Menu_Hook *h;
Eina_List *l;
if (!hook) return;
EINA_LIST_FOREACH(menu_hooks, l, h)
if (h == hook)
{
menu_hooks = eina_list_remove_list(menu_hooks, l);
free(h);
return;
}
}
EAPI void
e_int_border_menu_hooks_clear(void)
{
E_Border_Menu_Hook *h;
EINA_LIST_FREE(menu_hooks, h)
free(h);
}
EAPI void
e_int_border_menu_create(E_Border *bd)
{
E_Menu *m;
E_Menu_Item *mi;
Eina_List *l;
E_Border_Menu_Hook *h;
char buf[128];
if (bd->border_menu) return;
@ -152,6 +196,8 @@ e_int_border_menu_create(E_Border *bd)
"e/widgets/border/default/close"),
"e/widgets/border/default/close");
}
EINA_LIST_FOREACH(menu_hooks, l, h)
h->cb(bd, h->data);
}
EAPI void

View File

@ -4,6 +4,16 @@
#ifndef E_INT_BORDER_MENU_H
#define E_INT_BORDER_MENU_H
typedef void (*E_Border_Menu_Hook_Cb)(E_Border *, void *);
typedef struct E_Border_Menu_Hook
{
E_Border_Menu_Hook_Cb cb;
void *data;
} E_Border_Menu_Hook;
EAPI E_Border_Menu_Hook *e_int_border_menu_hook_add(E_Border_Menu_Hook_Cb cb, const void *data);
EAPI void e_int_border_menu_hook_del(E_Border_Menu_Hook *hook);
EAPI void e_int_border_menu_hooks_clear(void);
EAPI void e_int_border_menu_create(E_Border *bd);
EAPI void e_int_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key, Ecore_X_Time timestamp);
EAPI void e_int_border_menu_del(E_Border *bd);