forked from enlightenment/enlightenment
removed e_menu_item_icon_object_set as it could have never worked properly.
now, the menu icon can be set properly upon realization with the e_menu_item_realize_callback_set function. rewrote the clients menu to use the border icon, and be sorted like the winselector. SVN revision: 25026
This commit is contained in:
parent
de39c5f662
commit
d0751b3258
|
@ -37,8 +37,10 @@ static void _e_int_menus_config_pre_cb (void *data, E_Menu *m);
|
||||||
static void _e_int_menus_config_free_hook (void *obj);
|
static void _e_int_menus_config_free_hook (void *obj);
|
||||||
static void _e_int_menus_config_item_cb (void *data, E_Menu *m, E_Menu_Item *mi);
|
static void _e_int_menus_config_item_cb (void *data, E_Menu *m, E_Menu_Item *mi);
|
||||||
static void _e_int_menus_clients_pre_cb (void *data, E_Menu *m);
|
static void _e_int_menus_clients_pre_cb (void *data, E_Menu *m);
|
||||||
|
static void _e_int_menus_clients_item_create (E_Border *bd, E_Menu *m);
|
||||||
static void _e_int_menus_clients_free_hook (void *obj);
|
static void _e_int_menus_clients_free_hook (void *obj);
|
||||||
static void _e_int_menus_clients_item_cb (void *data, E_Menu *m, E_Menu_Item *mi);
|
static void _e_int_menus_clients_item_cb (void *data, E_Menu *m, E_Menu_Item *mi);
|
||||||
|
static void _e_int_menus_clients_icon_cb (void *data, E_Menu *m, E_Menu_Item *mi);
|
||||||
static void _e_int_menus_clients_cleanup_cb (void *data, E_Menu *m, E_Menu_Item *mi);
|
static void _e_int_menus_clients_cleanup_cb (void *data, E_Menu *m, E_Menu_Item *mi);
|
||||||
static void _e_int_menus_desktops_pre_cb (void *data, E_Menu *m);
|
static void _e_int_menus_desktops_pre_cb (void *data, E_Menu *m);
|
||||||
static void _e_int_menus_desktops_item_cb (void *data, E_Menu *m, E_Menu_Item *mi);
|
static void _e_int_menus_desktops_item_cb (void *data, E_Menu *m, E_Menu_Item *mi);
|
||||||
|
@ -685,21 +687,23 @@ static void
|
||||||
_e_int_menus_clients_pre_cb(void *data, E_Menu *m)
|
_e_int_menus_clients_pre_cb(void *data, E_Menu *m)
|
||||||
{
|
{
|
||||||
E_Menu_Item *mi;
|
E_Menu_Item *mi;
|
||||||
Evas_List *l, *borders = NULL;
|
Evas_List *l, *borders = NULL, *alt = NULL;
|
||||||
E_Menu *root;
|
|
||||||
E_Zone *zone = NULL;
|
E_Zone *zone = NULL;
|
||||||
|
E_Desk *desk = NULL;
|
||||||
const char *s;
|
const char *s;
|
||||||
|
|
||||||
e_menu_pre_activate_callback_set(m, NULL, NULL);
|
e_menu_pre_activate_callback_set(m, NULL, NULL);
|
||||||
root = e_menu_root_get(m);
|
|
||||||
/* get the current clients */
|
/* get the current clients */
|
||||||
if (root)
|
zone =
|
||||||
zone = root->zone;
|
e_zone_current_get(e_container_current_get(e_manager_current_get()));
|
||||||
|
desk = e_desk_current_get(zone);
|
||||||
for (l = e_border_client_list(); l; l = l->next)
|
for (l = e_border_client_list(); l; l = l->next)
|
||||||
{
|
{
|
||||||
E_Border *border;
|
E_Border *border;
|
||||||
|
|
||||||
border = l->data;
|
border = l->data;
|
||||||
|
if (border->client.netwm.state.skip_taskbar) continue;
|
||||||
|
if (border->user_skip_winlist) continue;
|
||||||
if ((border->zone == zone) || (border->iconic))
|
if ((border->zone == zone) || (border->iconic))
|
||||||
borders = evas_list_append(borders, border);
|
borders = evas_list_append(borders, border);
|
||||||
}
|
}
|
||||||
|
@ -714,31 +718,22 @@ _e_int_menus_clients_pre_cb(void *data, E_Menu *m)
|
||||||
for (l = borders; l; l = l->next)
|
for (l = borders; l; l = l->next)
|
||||||
{
|
{
|
||||||
E_Border *bd = l->data;
|
E_Border *bd = l->data;
|
||||||
E_App *a;
|
|
||||||
const char *title;
|
|
||||||
|
|
||||||
title = e_border_name_get(bd);
|
if (bd->desk != desk)
|
||||||
mi = e_menu_item_new(m);
|
|
||||||
e_menu_item_check_set(mi, 1);
|
|
||||||
if ((title) && (title[0]))
|
|
||||||
e_menu_item_label_set(mi, title);
|
|
||||||
else
|
|
||||||
e_menu_item_label_set(mi, _("No name!!"));
|
|
||||||
/* ref the border as we implicitly unref it in the callback */
|
|
||||||
e_object_ref(E_OBJECT(bd));
|
|
||||||
// e_object_breadcrumb_add(E_OBJECT(bd), "clients_menu");
|
|
||||||
e_menu_item_callback_set(mi, _e_int_menus_clients_item_cb, bd);
|
|
||||||
if (!bd->iconic) e_menu_item_toggle_set(mi, 1);
|
|
||||||
a = bd->app;
|
|
||||||
if (a)
|
|
||||||
{
|
{
|
||||||
if (!((a->icon_class) &&
|
alt = evas_list_append(alt, bd);
|
||||||
(e_util_menu_item_edje_icon_list_set(mi, a->icon_class))))
|
continue;
|
||||||
{
|
|
||||||
e_menu_item_icon_edje_set(mi, a->path, "icon");
|
|
||||||
if (a->icon_path) e_menu_item_icon_path_set(mi, a->icon_path);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
_e_int_menus_clients_item_create(bd, m);
|
||||||
|
}
|
||||||
|
mi = e_menu_item_new(m);
|
||||||
|
e_menu_item_separator_set(mi, 1);
|
||||||
|
|
||||||
|
for (l = alt; l; l = l->next)
|
||||||
|
{
|
||||||
|
E_Border *bd = l->data;
|
||||||
|
|
||||||
|
_e_int_menus_clients_item_create(bd, m);
|
||||||
}
|
}
|
||||||
mi = e_menu_item_new(m);
|
mi = e_menu_item_new(m);
|
||||||
e_menu_item_separator_set(mi, 1);
|
e_menu_item_separator_set(mi, 1);
|
||||||
|
@ -754,6 +749,27 @@ _e_int_menus_clients_pre_cb(void *data, E_Menu *m)
|
||||||
e_object_data_set(E_OBJECT(m), borders);
|
e_object_data_set(E_OBJECT(m), borders);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_int_menus_clients_item_create(E_Border *bd, E_Menu *m)
|
||||||
|
{
|
||||||
|
E_Menu_Item *mi;
|
||||||
|
const char *title;
|
||||||
|
|
||||||
|
title = e_border_name_get(bd);
|
||||||
|
mi = e_menu_item_new(m);
|
||||||
|
e_menu_item_check_set(mi, 1);
|
||||||
|
if ((title) && (title[0]))
|
||||||
|
e_menu_item_label_set(mi, title);
|
||||||
|
else
|
||||||
|
e_menu_item_label_set(mi, _("No name!!"));
|
||||||
|
/* ref the border as we implicitly unref it in the callback */
|
||||||
|
e_object_ref(E_OBJECT(bd));
|
||||||
|
/* e_object_breadcrumb_add(E_OBJECT(bd), "clients_menu");*/
|
||||||
|
e_menu_item_callback_set(mi, _e_int_menus_clients_item_cb, bd);
|
||||||
|
e_menu_item_realize_callback_set(mi, _e_int_menus_clients_icon_cb, bd);
|
||||||
|
if (!bd->iconic) e_menu_item_toggle_set(mi, 1);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_int_menus_clients_free_hook(void *obj)
|
_e_int_menus_clients_free_hook(void *obj)
|
||||||
{
|
{
|
||||||
|
@ -798,6 +814,21 @@ _e_int_menus_clients_item_cb(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_int_menus_clients_icon_cb(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||||
|
{
|
||||||
|
E_Border *bd;
|
||||||
|
Evas_Object *o;
|
||||||
|
|
||||||
|
bd = data;
|
||||||
|
E_OBJECT_CHECK(bd);
|
||||||
|
|
||||||
|
o = e_icon_add(m->evas);
|
||||||
|
e_icon_object_set(o, e_border_icon_add(bd, m->evas));
|
||||||
|
|
||||||
|
mi->icon_object = o;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_int_menus_clients_cleanup_cb(void *data, E_Menu *m, E_Menu_Item *mi)
|
_e_int_menus_clients_cleanup_cb(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||||
{
|
{
|
||||||
|
|
|
@ -47,6 +47,7 @@ static void _e_menu_submenu_activate (E_Menu_Item *mi);
|
||||||
static void _e_menu_submenu_deactivate (E_Menu_Item *mi);
|
static void _e_menu_submenu_deactivate (E_Menu_Item *mi);
|
||||||
static void _e_menu_reposition (E_Menu *m);
|
static void _e_menu_reposition (E_Menu *m);
|
||||||
static int _e_menu_active_call (void);
|
static int _e_menu_active_call (void);
|
||||||
|
static int _e_menu_realize_call (E_Menu_Item *mi);
|
||||||
static void _e_menu_item_activate_next (void);
|
static void _e_menu_item_activate_next (void);
|
||||||
static void _e_menu_item_activate_previous (void);
|
static void _e_menu_item_activate_previous (void);
|
||||||
static void _e_menu_item_activate_first (void);
|
static void _e_menu_item_activate_first (void);
|
||||||
|
@ -599,19 +600,6 @@ e_menu_item_icon_edje_set(E_Menu_Item *mi, const char *icon, const char *key)
|
||||||
mi->menu->changed = 1;
|
mi->menu->changed = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI void
|
|
||||||
e_menu_item_icon_object_set(E_Menu_Item *mi, Evas_Object *obj)
|
|
||||||
{
|
|
||||||
E_OBJECT_CHECK(mi);
|
|
||||||
E_OBJECT_TYPE_CHECK(mi, E_MENU_ITEM_TYPE);
|
|
||||||
if (((mi->icon_object) && (obj) && (mi->icon_object == obj)) ||
|
|
||||||
((!mi->icon_object) && (!obj)))
|
|
||||||
return;
|
|
||||||
mi->icon_object = obj;
|
|
||||||
mi->changed = 1;
|
|
||||||
mi->menu->changed = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
e_menu_item_label_set(E_Menu_Item *mi, const char *label)
|
e_menu_item_label_set(E_Menu_Item *mi, const char *label)
|
||||||
{
|
{
|
||||||
|
@ -761,6 +749,15 @@ e_menu_item_callback_set(E_Menu_Item *mi, void (*func) (void *data, E_Menu *m,
|
||||||
mi->cb.data = data;
|
mi->cb.data = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
e_menu_item_realize_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->realize_cb.func = func;
|
||||||
|
mi->realize_cb.data = data;
|
||||||
|
}
|
||||||
|
|
||||||
EAPI void
|
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)
|
e_menu_item_submenu_pre_callback_set(E_Menu_Item *mi, void (*func) (void *data, E_Menu *m, E_Menu_Item *mi), void *data)
|
||||||
{
|
{
|
||||||
|
@ -1199,7 +1196,7 @@ _e_menu_item_realize(E_Menu_Item *mi)
|
||||||
evas_object_pass_events_set(o, 1);
|
evas_object_pass_events_set(o, 1);
|
||||||
e_box_pack_end(mi->container_object, o);
|
e_box_pack_end(mi->container_object, o);
|
||||||
}
|
}
|
||||||
if (mi->icon || mi->icon_object)
|
if (mi->icon || mi->realize_cb.func)
|
||||||
{
|
{
|
||||||
int icon_w, icon_h;
|
int icon_w, icon_h;
|
||||||
|
|
||||||
|
@ -1213,17 +1210,7 @@ _e_menu_item_realize(E_Menu_Item *mi)
|
||||||
else
|
else
|
||||||
evas_object_del(o);
|
evas_object_del(o);
|
||||||
|
|
||||||
/* FIXME: This should be cleaned up a bit. */
|
if (mi->icon)
|
||||||
if (mi->icon_object)
|
|
||||||
{
|
|
||||||
o = e_icon_add(mi->menu->evas);
|
|
||||||
e_icon_object_set(o, mi->icon_object);
|
|
||||||
e_icon_fill_inside_set(o, 1);
|
|
||||||
e_icon_size_get(o, &icon_w, &icon_h);
|
|
||||||
|
|
||||||
mi->icon_object = o;
|
|
||||||
}
|
|
||||||
else if (mi->icon)
|
|
||||||
{
|
{
|
||||||
/* Try a the usual suspects first. */
|
/* Try a the usual suspects first. */
|
||||||
if (!mi->icon_key)
|
if (!mi->icon_key)
|
||||||
|
@ -1259,6 +1246,12 @@ _e_menu_item_realize(E_Menu_Item *mi)
|
||||||
e_icon_size_get(mi->icon_object, &icon_w, &icon_h);
|
e_icon_size_get(mi->icon_object, &icon_w, &icon_h);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (_e_menu_realize_call(mi))
|
||||||
|
{
|
||||||
|
o = mi->icon_object;
|
||||||
|
e_icon_fill_inside_set(o, 1);
|
||||||
|
e_icon_size_get(o, &icon_w, &icon_h);
|
||||||
|
}
|
||||||
|
|
||||||
evas_object_pass_events_set(o, 1);
|
evas_object_pass_events_set(o, 1);
|
||||||
evas_object_show(o);
|
evas_object_show(o);
|
||||||
|
@ -1896,6 +1889,20 @@ _e_menu_active_call(void)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_e_menu_realize_call(E_Menu_Item *mi)
|
||||||
|
{
|
||||||
|
if (mi)
|
||||||
|
{
|
||||||
|
if (mi->realize_cb.func)
|
||||||
|
{
|
||||||
|
mi->realize_cb.func(mi->realize_cb.data, mi->menu, mi);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_menu_item_activate_next(void)
|
_e_menu_item_activate_next(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -113,7 +113,12 @@ struct _E_Menu_Item
|
||||||
struct {
|
struct {
|
||||||
void *data;
|
void *data;
|
||||||
void (*func) (void *data, E_Menu *m, E_Menu_Item *mi);
|
void (*func) (void *data, E_Menu *m, E_Menu_Item *mi);
|
||||||
} cb;
|
} cb; /* Callback for menu item activation */
|
||||||
|
|
||||||
|
struct {
|
||||||
|
void *data;
|
||||||
|
void (*func) (void *data, E_Menu *m, E_Menu_Item *mi);
|
||||||
|
} realize_cb; /* Callback for menu item icon realization */
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
void *data;
|
void *data;
|
||||||
|
@ -173,7 +178,6 @@ EAPI int e_menu_item_num_get(E_Menu_Item *mi);
|
||||||
EAPI void e_menu_item_icon_path_set(E_Menu_Item *mi, const char *icon);
|
EAPI void e_menu_item_icon_path_set(E_Menu_Item *mi, const char *icon);
|
||||||
EAPI void e_menu_item_icon_file_set(E_Menu_Item *mi, const char *icon);
|
EAPI void e_menu_item_icon_file_set(E_Menu_Item *mi, const char *icon);
|
||||||
EAPI void e_menu_item_icon_edje_set(E_Menu_Item *mi, const char *icon, const char *key);
|
EAPI void e_menu_item_icon_edje_set(E_Menu_Item *mi, const char *icon, const char *key);
|
||||||
EAPI void e_menu_item_icon_object_set(E_Menu_Item *mi, Evas_Object *obj);
|
|
||||||
EAPI void e_menu_item_label_set(E_Menu_Item *mi, const char *label);
|
EAPI void e_menu_item_label_set(E_Menu_Item *mi, const char *label);
|
||||||
EAPI void e_menu_item_submenu_set(E_Menu_Item *mi, E_Menu *sub);
|
EAPI void e_menu_item_submenu_set(E_Menu_Item *mi, E_Menu *sub);
|
||||||
EAPI void e_menu_item_separator_set(E_Menu_Item *mi, int sep);
|
EAPI void e_menu_item_separator_set(E_Menu_Item *mi, int sep);
|
||||||
|
@ -183,6 +187,7 @@ 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_realize_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_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_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);
|
||||||
|
|
Loading…
Reference in New Issue