forked from enlightenment/enlightenment
Add hooks to support submenus on the fly.
SVN revision: 14272
This commit is contained in:
parent
e94cfff3ac
commit
0e445560db
|
@ -67,6 +67,8 @@ static int _e_menu_cb_mouse_wheel (void *data, int type, void *e
|
||||||
static int _e_menu_cb_scroll_timer (void *data);
|
static int _e_menu_cb_scroll_timer (void *data);
|
||||||
static int _e_menu_cb_window_shape (void *data, int ev_type, void *ev);
|
static int _e_menu_cb_window_shape (void *data, int ev_type, void *ev);
|
||||||
|
|
||||||
|
static void _e_menu_item_submenu_post_cb_default(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||||
|
|
||||||
/* local subsystem globals */
|
/* local subsystem globals */
|
||||||
static Ecore_X_Window _e_menu_win = 0;
|
static Ecore_X_Window _e_menu_win = 0;
|
||||||
static Evas_List *_e_active_menus = NULL;
|
static Evas_List *_e_active_menus = NULL;
|
||||||
|
@ -500,6 +502,26 @@ e_menu_item_callback_set(E_Menu_Item *mi, void (*func) (void *data, E_Menu *m,
|
||||||
mi->cb.data = data;
|
mi->cb.data = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
e_menu_item_submenu_pre_callback_set(E_Menu_Item *mi, void (*func) (void *data, E_Menu *m, E_Menu_Item *mi), void *data)
|
||||||
|
{
|
||||||
|
E_OBJECT_CHECK(mi);
|
||||||
|
E_OBJECT_TYPE_CHECK(mi, E_MENU_ITEM_TYPE);
|
||||||
|
mi->submenu_pre_cb.func = func;
|
||||||
|
mi->submenu_pre_cb.data = data;
|
||||||
|
if (!mi->submenu_post_cb.func)
|
||||||
|
mi->submenu_post_cb.func = _e_menu_item_submenu_post_cb_default;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
e_menu_item_submenu_post_callback_set(E_Menu_Item *mi, void (*func) (void *data, E_Menu *m, E_Menu_Item *mi), void *data)
|
||||||
|
{
|
||||||
|
E_OBJECT_CHECK(mi);
|
||||||
|
E_OBJECT_TYPE_CHECK(mi, E_MENU_ITEM_TYPE);
|
||||||
|
mi->submenu_post_cb.func = func;
|
||||||
|
mi->submenu_post_cb.data = data;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
e_menu_item_active_set(E_Menu_Item *mi, int active)
|
e_menu_item_active_set(E_Menu_Item *mi, int active)
|
||||||
{
|
{
|
||||||
|
@ -1436,6 +1458,8 @@ _e_menu_submenu_activate(E_Menu_Item *mi)
|
||||||
}
|
}
|
||||||
mi->menu->pending_new_submenu = 0;
|
mi->menu->pending_new_submenu = 0;
|
||||||
_e_menu_deactivate_above(mi->menu);
|
_e_menu_deactivate_above(mi->menu);
|
||||||
|
if (mi->submenu_pre_cb.func)
|
||||||
|
mi->submenu_pre_cb.func(mi->submenu_pre_cb.data, mi->menu, mi);
|
||||||
if (mi->submenu)
|
if (mi->submenu)
|
||||||
{
|
{
|
||||||
E_Menu *m;
|
E_Menu *m;
|
||||||
|
@ -1447,6 +1471,8 @@ _e_menu_submenu_activate(E_Menu_Item *mi)
|
||||||
_e_menu_reposition(m);
|
_e_menu_reposition(m);
|
||||||
e_object_unref(E_OBJECT(m));
|
e_object_unref(E_OBJECT(m));
|
||||||
}
|
}
|
||||||
|
if (mi->submenu_post_cb.func)
|
||||||
|
mi->submenu_post_cb.func(mi->submenu_post_cb.data, mi->menu, mi);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -2185,3 +2211,15 @@ _e_menu_cb_window_shape(void *data, int ev_type, void *ev)
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_menu_item_submenu_post_cb_default(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||||
|
{
|
||||||
|
E_Menu *subm;
|
||||||
|
|
||||||
|
if (!mi->submenu) return;
|
||||||
|
|
||||||
|
subm = mi->submenu;
|
||||||
|
e_menu_item_submenu_set(mi, NULL);
|
||||||
|
e_object_del(E_OBJECT(subm));
|
||||||
|
}
|
||||||
|
|
|
@ -108,6 +108,16 @@ struct _E_Menu_Item
|
||||||
void (*func) (void *data, E_Menu *m, E_Menu_Item *mi);
|
void (*func) (void *data, E_Menu *m, E_Menu_Item *mi);
|
||||||
} cb;
|
} cb;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
void *data;
|
||||||
|
void (*func) (void *data, E_Menu *m, E_Menu_Item *mi);
|
||||||
|
} submenu_pre_cb;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
void *data;
|
||||||
|
void (*func) (void *data, E_Menu *m, E_Menu_Item *mi);
|
||||||
|
} submenu_post_cb;
|
||||||
|
|
||||||
unsigned char separator : 1;
|
unsigned char separator : 1;
|
||||||
unsigned char radio : 1;
|
unsigned char radio : 1;
|
||||||
unsigned char check : 1;
|
unsigned char check : 1;
|
||||||
|
@ -147,6 +157,8 @@ EAPI void e_menu_item_radio_group_set(E_Menu_Item *mi, int radg);
|
||||||
EAPI void e_menu_item_toggle_set(E_Menu_Item *mi, int tog);
|
EAPI void e_menu_item_toggle_set(E_Menu_Item *mi, int tog);
|
||||||
EAPI int e_menu_item_toggle_get(E_Menu_Item *mi);
|
EAPI int e_menu_item_toggle_get(E_Menu_Item *mi);
|
||||||
EAPI void e_menu_item_callback_set(E_Menu_Item *mi, void (*func) (void *data, E_Menu *m, E_Menu_Item *mi), void *data);
|
EAPI void e_menu_item_callback_set(E_Menu_Item *mi, void (*func) (void *data, E_Menu *m, E_Menu_Item *mi), void *data);
|
||||||
|
EAPI void e_menu_item_submenu_pre_callback_set(E_Menu_Item *mi, void (*func) (void *data, E_Menu *m, E_Menu_Item *mi), void *data);
|
||||||
|
EAPI void e_menu_item_submenu_post_callback_set(E_Menu_Item *mi, void (*func) (void *data, E_Menu *m, E_Menu_Item *mi), void *data);
|
||||||
EAPI void e_menu_item_active_set(E_Menu_Item *mi, int active);
|
EAPI void e_menu_item_active_set(E_Menu_Item *mi, int active);
|
||||||
|
|
||||||
EAPI void e_menu_idler_before(void);
|
EAPI void e_menu_idler_before(void);
|
||||||
|
|
Loading…
Reference in New Issue