parent
fb323cef74
commit
3475cb81c5
258
src/bin/e_menu.c
258
src/bin/e_menu.c
|
@ -113,6 +113,28 @@ static Ecore_Event_Handler *_e_menu_mouse_move_handler = NULL;
|
||||||
static Ecore_Event_Handler *_e_menu_mouse_wheel_handler = NULL;
|
static Ecore_Event_Handler *_e_menu_mouse_wheel_handler = NULL;
|
||||||
static Ecore_Event_Handler *_e_menu_window_shape_handler = NULL;
|
static Ecore_Event_Handler *_e_menu_window_shape_handler = NULL;
|
||||||
|
|
||||||
|
static Eina_List *
|
||||||
|
_e_active_menus_copy_ref(void)
|
||||||
|
{
|
||||||
|
E_Object *o;
|
||||||
|
Eina_List *l, *ret = NULL;
|
||||||
|
EINA_LIST_FOREACH(_e_active_menus, l, o)
|
||||||
|
{
|
||||||
|
ret = eina_list_append(ret, o);
|
||||||
|
e_object_ref(o);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_List *
|
||||||
|
_e_menu_list_free_unref(Eina_List *l)
|
||||||
|
{
|
||||||
|
E_Object *o;
|
||||||
|
EINA_LIST_FREE(l, o)
|
||||||
|
e_object_unref(o);
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
/* externally accessible functions */
|
/* externally accessible functions */
|
||||||
EAPI int
|
EAPI int
|
||||||
e_menu_init(void)
|
e_menu_init(void)
|
||||||
|
@ -550,20 +572,20 @@ e_menu_item_nth(E_Menu *m, int n)
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI int
|
EAPI int
|
||||||
e_menu_item_num_get(E_Menu_Item *mi)
|
e_menu_item_num_get(const E_Menu_Item *mi)
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
const Eina_List *l;
|
||||||
|
const E_Menu_Item *mi2;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
E_OBJECT_CHECK_RETURN(mi, -1);
|
E_OBJECT_CHECK_RETURN(mi, -1);
|
||||||
E_OBJECT_CHECK_RETURN(mi->menu, -1);
|
E_OBJECT_CHECK_RETURN(mi->menu, -1);
|
||||||
E_OBJECT_TYPE_CHECK_RETURN(mi, E_MENU_TYPE, -1);
|
E_OBJECT_TYPE_CHECK_RETURN(mi, E_MENU_TYPE, -1);
|
||||||
for (i = 0, l = mi->menu->items; l; l = l->next, i++)
|
i = 0;
|
||||||
|
EINA_LIST_FOREACH(mi->menu->items, l, mi2)
|
||||||
{
|
{
|
||||||
E_Menu_Item *mi2;
|
|
||||||
|
|
||||||
mi2 = l->data;
|
|
||||||
if (mi2 == mi) return i;
|
if (mi2 == mi) return i;
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -720,15 +742,13 @@ e_menu_item_toggle_set(E_Menu_Item *mi, int tog)
|
||||||
{
|
{
|
||||||
if (mi->radio)
|
if (mi->radio)
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
const Eina_List *l;
|
||||||
|
E_Menu_Item *mi2;
|
||||||
for (l = mi->menu->items; l; l = l->next)
|
|
||||||
|
EINA_LIST_FOREACH(mi->menu->items, l, mi2)
|
||||||
{
|
{
|
||||||
E_Menu_Item *mi2;
|
if ((mi2 != mi) &&
|
||||||
|
(mi2->radio) &&
|
||||||
mi2 = l->data;
|
|
||||||
if ((mi2 != mi) &&
|
|
||||||
(mi2->radio) &&
|
|
||||||
(mi2->radio_group == mi->radio_group))
|
(mi2->radio_group == mi->radio_group))
|
||||||
e_menu_item_toggle_set(mi2, 0);
|
e_menu_item_toggle_set(mi2, 0);
|
||||||
}
|
}
|
||||||
|
@ -848,20 +868,14 @@ e_menu_idler_before(void)
|
||||||
/* when e goes "idle" this gets called so leave all our hard work till */
|
/* when e goes "idle" this gets called so leave all our hard work till */
|
||||||
/* idle time to avoid falling behind the user. just evaluate the high */
|
/* idle time to avoid falling behind the user. just evaluate the high */
|
||||||
/* level state machine */
|
/* level state machine */
|
||||||
Eina_List *l, *removals = NULL, *tmp = NULL;
|
Eina_List *l, *removals = NULL, *tmp;
|
||||||
|
E_Menu *m;
|
||||||
|
|
||||||
/* add refcount to all menus we will work with */
|
/* add refcount to all menus we will work with */
|
||||||
for (l = _e_active_menus; l; l = l->next)
|
tmp = _e_active_menus_copy_ref();
|
||||||
{
|
|
||||||
tmp = eina_list_append(tmp, l->data);
|
|
||||||
e_object_ref(E_OBJECT(l->data));
|
|
||||||
}
|
|
||||||
/* phase 1. hide all the menus that want to be hidden */
|
/* phase 1. hide all the menus that want to be hidden */
|
||||||
for (l = _e_active_menus; l; l = l->next)
|
EINA_LIST_FOREACH(_e_active_menus, l, m)
|
||||||
{
|
{
|
||||||
E_Menu *m;
|
|
||||||
|
|
||||||
m = l->data;
|
|
||||||
if ((!m->cur.visible) && (m->prev.visible))
|
if ((!m->cur.visible) && (m->prev.visible))
|
||||||
{
|
{
|
||||||
m->prev.visible = m->cur.visible;
|
m->prev.visible = m->cur.visible;
|
||||||
|
@ -870,11 +884,8 @@ e_menu_idler_before(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* phase 2. move & reisze all the menus that want to moves/resized */
|
/* phase 2. move & reisze all the menus that want to moves/resized */
|
||||||
for (l = _e_active_menus; l; l = l->next)
|
EINA_LIST_FOREACH(_e_active_menus, l, m)
|
||||||
{
|
{
|
||||||
E_Menu *m;
|
|
||||||
|
|
||||||
m = l->data;
|
|
||||||
if (!m->realized) _e_menu_realize(m);
|
if (!m->realized) _e_menu_realize(m);
|
||||||
if (m->realized)
|
if (m->realized)
|
||||||
{
|
{
|
||||||
|
@ -897,11 +908,8 @@ e_menu_idler_before(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* phase 3. show all the menus that want to be shown */
|
/* phase 3. show all the menus that want to be shown */
|
||||||
for (l = _e_active_menus; l; l = l->next)
|
EINA_LIST_FOREACH(_e_active_menus, l, m)
|
||||||
{
|
{
|
||||||
E_Menu *m;
|
|
||||||
|
|
||||||
m = l->data;
|
|
||||||
if ((m->cur.visible) && (!m->prev.visible))
|
if ((m->cur.visible) && (!m->prev.visible))
|
||||||
{
|
{
|
||||||
m->prev.visible = m->cur.visible;
|
m->prev.visible = m->cur.visible;
|
||||||
|
@ -912,23 +920,16 @@ e_menu_idler_before(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* phase 4. de-activate... */
|
/* phase 4. de-activate... */
|
||||||
for (l = _e_active_menus; l; l = l->next)
|
EINA_LIST_FOREACH(_e_active_menus, l, m)
|
||||||
{
|
{
|
||||||
E_Menu *m;
|
|
||||||
|
|
||||||
m = l->data;
|
|
||||||
if (!m->active)
|
if (!m->active)
|
||||||
{
|
{
|
||||||
_e_menu_unrealize(m);
|
_e_menu_unrealize(m);
|
||||||
removals = eina_list_append(removals, m);
|
removals = eina_list_append(removals, m);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (removals)
|
EINA_LIST_FREE(removals, m)
|
||||||
{
|
{
|
||||||
E_Menu *m;
|
|
||||||
|
|
||||||
m = removals->data;
|
|
||||||
removals = eina_list_remove(removals, m);
|
|
||||||
if (m->in_active_list)
|
if (m->in_active_list)
|
||||||
{
|
{
|
||||||
_e_active_menus = eina_list_remove(_e_active_menus, m);
|
_e_active_menus = eina_list_remove(_e_active_menus, m);
|
||||||
|
@ -937,11 +938,8 @@ e_menu_idler_before(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* phase 5. shapes... */
|
/* phase 5. shapes... */
|
||||||
for (l = _e_active_menus; l; l = l->next)
|
EINA_LIST_FOREACH(_e_active_menus, l, m)
|
||||||
{
|
{
|
||||||
E_Menu *m;
|
|
||||||
|
|
||||||
m = l->data;
|
|
||||||
if (m->need_shape_export)
|
if (m->need_shape_export)
|
||||||
{
|
{
|
||||||
Ecore_X_Rectangle *rects, *orects;
|
Ecore_X_Rectangle *rects, *orects;
|
||||||
|
@ -994,11 +992,8 @@ e_menu_idler_before(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* del refcount to all menus we worked with */
|
/* del refcount to all menus we worked with */
|
||||||
while (tmp)
|
tmp = _e_menu_list_free_unref(tmp);
|
||||||
{
|
|
||||||
e_object_unref(E_OBJECT(tmp->data));
|
|
||||||
tmp = eina_list_remove_list(tmp, tmp);
|
|
||||||
}
|
|
||||||
if (!_e_active_menus)
|
if (!_e_active_menus)
|
||||||
{
|
{
|
||||||
if (_e_menu_win)
|
if (_e_menu_win)
|
||||||
|
@ -1020,29 +1015,26 @@ e_menu_grab_window_get(void)
|
||||||
static void
|
static void
|
||||||
_e_menu_free(E_Menu *m)
|
_e_menu_free(E_Menu *m)
|
||||||
{
|
{
|
||||||
Eina_List *l, *tmp;
|
Eina_List *l, *l_next;
|
||||||
|
E_Menu_Item *mi;
|
||||||
E_Menu_Category *cat = NULL;
|
E_Menu_Category *cat = NULL;
|
||||||
|
|
||||||
/* the foreign menu items */
|
/* the foreign menu items */
|
||||||
if (m->category) cat = eina_hash_find(_e_menu_categories, m->category);
|
if (m->category) cat = eina_hash_find(_e_menu_categories, m->category);
|
||||||
if (cat)
|
if (cat)
|
||||||
{
|
{
|
||||||
for (l = cat->callbacks; l; l = l->next)
|
E_Menu_Category_Callback *cb;
|
||||||
|
EINA_LIST_FOREACH(cat->callbacks, l, cb)
|
||||||
{
|
{
|
||||||
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);
|
_e_menu_unrealize(m);
|
||||||
E_FREE(m->shape_rects);
|
E_FREE(m->shape_rects);
|
||||||
m->shape_rects_num = 0;
|
m->shape_rects_num = 0;
|
||||||
for (l = m->items; l;)
|
EINA_LIST_FOREACH_SAFE(m->items, l, l_next, mi)
|
||||||
{
|
{
|
||||||
tmp = l;
|
e_object_del(E_OBJECT(mi));
|
||||||
l = l->next;
|
|
||||||
e_object_del(E_OBJECT(tmp->data));
|
|
||||||
}
|
}
|
||||||
if (m->in_active_list)
|
if (m->in_active_list)
|
||||||
{
|
{
|
||||||
|
@ -1370,6 +1362,7 @@ _e_menu_realize(E_Menu *m)
|
||||||
{
|
{
|
||||||
Evas_Object *o;
|
Evas_Object *o;
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
|
E_Menu_Item *mi;
|
||||||
|
|
||||||
int ok;
|
int ok;
|
||||||
|
|
||||||
|
@ -1442,12 +1435,8 @@ _e_menu_realize(E_Menu *m)
|
||||||
e_box_homogenous_set(o, 0);
|
e_box_homogenous_set(o, 0);
|
||||||
edje_object_part_swallow(m->bg_object, "e.swallow.content", m->container_object);
|
edje_object_part_swallow(m->bg_object, "e.swallow.content", m->container_object);
|
||||||
|
|
||||||
|
EINA_LIST_FOREACH(m->items, l, mi)
|
||||||
for (l = m->items; l; l = l->next)
|
|
||||||
{
|
{
|
||||||
E_Menu_Item *mi;
|
|
||||||
|
|
||||||
mi = l->data;
|
|
||||||
_e_menu_item_realize(mi);
|
_e_menu_item_realize(mi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1462,6 +1451,7 @@ static void
|
||||||
_e_menu_items_layout_update(E_Menu *m)
|
_e_menu_items_layout_update(E_Menu *m)
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
|
E_Menu_Item *mi;
|
||||||
Evas_Coord bw, bh, mw, mh;
|
Evas_Coord bw, bh, mw, mh;
|
||||||
int toggles_on = 0;
|
int toggles_on = 0;
|
||||||
int icons_on = 0;
|
int icons_on = 0;
|
||||||
|
@ -1474,12 +1464,8 @@ _e_menu_items_layout_update(E_Menu *m)
|
||||||
int min_w = 0, min_h = 0;
|
int min_w = 0, min_h = 0;
|
||||||
|
|
||||||
e_box_freeze(m->container_object);
|
e_box_freeze(m->container_object);
|
||||||
for (l = m->items; l; l = l->next)
|
EINA_LIST_FOREACH(m->items, l, mi)
|
||||||
{
|
{
|
||||||
E_Menu_Item *mi;
|
|
||||||
|
|
||||||
mi = l->data;
|
|
||||||
|
|
||||||
if (mi->icon) icons_on = 1;
|
if (mi->icon) icons_on = 1;
|
||||||
if (mi->icon_object) icons_on = 1;
|
if (mi->icon_object) icons_on = 1;
|
||||||
if (mi->label) labels_on = 1;
|
if (mi->label) labels_on = 1;
|
||||||
|
@ -1541,11 +1527,8 @@ _e_menu_items_layout_update(E_Menu *m)
|
||||||
min_w = min_toggle_w + min_submenu_w;
|
min_w = min_toggle_w + min_submenu_w;
|
||||||
min_h = min_toggle_h;
|
min_h = min_toggle_h;
|
||||||
}
|
}
|
||||||
for (l = m->items; l; l = l->next)
|
EINA_LIST_FOREACH(m->items, l, mi)
|
||||||
{
|
{
|
||||||
E_Menu_Item *mi;
|
|
||||||
|
|
||||||
mi = l->data;
|
|
||||||
if (mi->separator)
|
if (mi->separator)
|
||||||
{
|
{
|
||||||
e_box_pack_options_set(mi->separator_object,
|
e_box_pack_options_set(mi->separator_object,
|
||||||
|
@ -1685,19 +1668,16 @@ static void
|
||||||
_e_menu_unrealize(E_Menu *m)
|
_e_menu_unrealize(E_Menu *m)
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
|
E_Menu_Item *mi;
|
||||||
|
|
||||||
if (!m->realized) return;
|
if (!m->realized) return;
|
||||||
evas_event_freeze(m->evas);
|
evas_event_freeze(m->evas);
|
||||||
e_container_shape_hide(m->shape);
|
e_container_shape_hide(m->shape);
|
||||||
e_object_del(E_OBJECT(m->shape));
|
e_object_del(E_OBJECT(m->shape));
|
||||||
m->shape = NULL;
|
m->shape = NULL;
|
||||||
e_box_freeze(m->container_object);
|
e_box_freeze(m->container_object);
|
||||||
|
EINA_LIST_FOREACH(m->items, l, mi)
|
||||||
for (l = m->items; l; l = l->next)
|
|
||||||
{
|
{
|
||||||
E_Menu_Item *mi;
|
|
||||||
|
|
||||||
mi = l->data;
|
|
||||||
_e_menu_item_unrealize(mi);
|
_e_menu_item_unrealize(mi);
|
||||||
}
|
}
|
||||||
if (m->header.icon) evas_object_del(m->header.icon);
|
if (m->header.icon) evas_object_del(m->header.icon);
|
||||||
|
@ -1767,11 +1747,9 @@ _e_menu_activate_internal(E_Menu *m, E_Zone *zone)
|
||||||
cat = evas_hash_find(_e_menu_categories, m->category);
|
cat = evas_hash_find(_e_menu_categories, m->category);
|
||||||
if (cat)
|
if (cat)
|
||||||
{
|
{
|
||||||
for (l = cat->callbacks; l; l = l->next)
|
E_Menu_Category_Callback *cb;
|
||||||
|
EINA_LIST_FOREACH(cat->callbacks, l, cb)
|
||||||
{
|
{
|
||||||
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1782,19 +1760,13 @@ _e_menu_activate_internal(E_Menu *m, E_Zone *zone)
|
||||||
static void
|
static void
|
||||||
_e_menu_deactivate_all(void)
|
_e_menu_deactivate_all(void)
|
||||||
{
|
{
|
||||||
Eina_List *l, *tmp = NULL;
|
Eina_List *tmp;
|
||||||
|
E_Menu *m;
|
||||||
|
|
||||||
for (l = _e_active_menus; l; l = l->next)
|
tmp = _e_active_menus_copy_ref();
|
||||||
|
|
||||||
|
EINA_LIST_FREE(tmp, m)
|
||||||
{
|
{
|
||||||
e_object_ref(E_OBJECT(l->data));
|
|
||||||
tmp = eina_list_append(tmp, l->data);
|
|
||||||
}
|
|
||||||
while (tmp)
|
|
||||||
{
|
|
||||||
E_Menu *m;
|
|
||||||
|
|
||||||
m = tmp->data;
|
|
||||||
tmp = eina_list_remove_list(tmp, tmp);
|
|
||||||
e_menu_deactivate(m);
|
e_menu_deactivate(m);
|
||||||
m->parent_item = NULL;
|
m->parent_item = NULL;
|
||||||
e_object_unref(E_OBJECT(m));
|
e_object_unref(E_OBJECT(m));
|
||||||
|
@ -1807,20 +1779,14 @@ _e_menu_deactivate_all(void)
|
||||||
static void
|
static void
|
||||||
_e_menu_deactivate_above(E_Menu *ma)
|
_e_menu_deactivate_above(E_Menu *ma)
|
||||||
{
|
{
|
||||||
Eina_List *l, *tmp = NULL;
|
Eina_List *tmp;
|
||||||
int above = 0;
|
int above = 0;
|
||||||
|
E_Menu *m;
|
||||||
|
|
||||||
for (l = _e_active_menus; l; l = l->next)
|
tmp = _e_active_menus_copy_ref();
|
||||||
|
|
||||||
|
EINA_LIST_FREE(tmp, m)
|
||||||
{
|
{
|
||||||
e_object_ref(E_OBJECT(l->data));
|
|
||||||
tmp = eina_list_append(tmp, l->data);
|
|
||||||
}
|
|
||||||
while (tmp)
|
|
||||||
{
|
|
||||||
E_Menu *m;
|
|
||||||
|
|
||||||
m = tmp->data;
|
|
||||||
tmp = eina_list_remove_list(tmp, tmp);
|
|
||||||
if (above)
|
if (above)
|
||||||
{
|
{
|
||||||
e_menu_deactivate(m);
|
e_menu_deactivate(m);
|
||||||
|
@ -1868,7 +1834,8 @@ _e_menu_submenu_deactivate(E_Menu_Item *mi)
|
||||||
static void
|
static void
|
||||||
_e_menu_reposition(E_Menu *m)
|
_e_menu_reposition(E_Menu *m)
|
||||||
{
|
{
|
||||||
Eina_List *l, *tmp = NULL;
|
Eina_List *l, *tmp;
|
||||||
|
E_Menu_Item *mi;
|
||||||
int parent_item_bottom;
|
int parent_item_bottom;
|
||||||
|
|
||||||
if (!m->parent_item) return;
|
if (!m->parent_item) return;
|
||||||
|
@ -1897,23 +1864,14 @@ _e_menu_reposition(E_Menu *m)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME: this will suck for big menus */
|
/* FIXME: this will suck for big menus */
|
||||||
for (l = _e_active_menus; l; l = l->next)
|
tmp = _e_active_menus_copy_ref();
|
||||||
|
|
||||||
|
EINA_LIST_FOREACH(m->items, l, mi)
|
||||||
{
|
{
|
||||||
tmp = eina_list_append(tmp, l->data);
|
|
||||||
e_object_ref(E_OBJECT(l->data));
|
|
||||||
}
|
|
||||||
for (l = m->items; l; l = l->next)
|
|
||||||
{
|
|
||||||
E_Menu_Item *mi;
|
|
||||||
|
|
||||||
mi = l->data;
|
|
||||||
if ((mi->active) && (mi->submenu)) _e_menu_reposition(mi->submenu);
|
if ((mi->active) && (mi->submenu)) _e_menu_reposition(mi->submenu);
|
||||||
}
|
}
|
||||||
while (tmp)
|
|
||||||
{
|
_e_menu_list_free_unref(tmp);
|
||||||
e_object_unref(E_OBJECT(tmp->data));
|
|
||||||
tmp = eina_list_remove_list(tmp, tmp);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -2084,9 +2042,9 @@ _e_menu_item_activate_nth(int n)
|
||||||
if (!mi) return;
|
if (!mi) return;
|
||||||
}
|
}
|
||||||
m = mi->menu;
|
m = mi->menu;
|
||||||
for (i = -1, ll = m->items; ll; ll = ll->next)
|
i = -1;
|
||||||
|
EINA_LIST_FOREACH(m->items, ll, mi)
|
||||||
{
|
{
|
||||||
mi = ll->data;
|
|
||||||
if (!mi->separator) i++;
|
if (!mi->separator) i++;
|
||||||
if (i == n) break;
|
if (i == n) break;
|
||||||
}
|
}
|
||||||
|
@ -2265,11 +2223,9 @@ _e_menu_activate_nth(int n)
|
||||||
if (!mi) return;
|
if (!mi) return;
|
||||||
}
|
}
|
||||||
m = mi->menu;
|
m = mi->menu;
|
||||||
for (i = -1, ll = m->items; ll; ll = ll->next)
|
i = -1;
|
||||||
|
EINA_LIST_FOREACH(m->items, ll, mi)
|
||||||
{
|
{
|
||||||
E_Menu_Item *mi;
|
|
||||||
|
|
||||||
mi = ll->data;
|
|
||||||
if (!mi->separator) i++;
|
if (!mi->separator) i++;
|
||||||
if (i == n)
|
if (i == n)
|
||||||
{
|
{
|
||||||
|
@ -2307,17 +2263,15 @@ static int
|
||||||
_e_menu_outside_bounds_get(int xdir, int ydir)
|
_e_menu_outside_bounds_get(int xdir, int ydir)
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
|
E_Menu *m;
|
||||||
int outl = 0;
|
int outl = 0;
|
||||||
int outr = 0;
|
int outr = 0;
|
||||||
int outt = 0;
|
int outt = 0;
|
||||||
int outb = 0;
|
int outb = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (l = _e_active_menus; l; l = l->next)
|
|
||||||
{
|
|
||||||
E_Menu *m;
|
|
||||||
|
|
||||||
m = l->data;
|
EINA_LIST_FOREACH(_e_active_menus, l, m)
|
||||||
|
{
|
||||||
if (m->cur.x < m->zone->x + e_config->menu_autoscroll_margin)
|
if (m->cur.x < m->zone->x + e_config->menu_autoscroll_margin)
|
||||||
{
|
{
|
||||||
i = m->zone->x - m->cur.x + e_config->menu_autoscroll_margin;
|
i = m->zone->x - m->cur.x + e_config->menu_autoscroll_margin;
|
||||||
|
@ -2362,12 +2316,10 @@ static void
|
||||||
_e_menu_scroll_by(int dx, int dy)
|
_e_menu_scroll_by(int dx, int dy)
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
|
E_Menu *m;
|
||||||
for (l = _e_active_menus; l; l = l->next)
|
|
||||||
|
EINA_LIST_FOREACH(_e_active_menus, l, m)
|
||||||
{
|
{
|
||||||
E_Menu *m;
|
|
||||||
|
|
||||||
m = l->data;
|
|
||||||
m->cur.x += dx;
|
m->cur.x += dx;
|
||||||
m->cur.y += dy;
|
m->cur.y += dy;
|
||||||
}
|
}
|
||||||
|
@ -2711,7 +2663,8 @@ static int
|
||||||
_e_menu_cb_mouse_move(void *data, int type, void *event)
|
_e_menu_cb_mouse_move(void *data, int type, void *event)
|
||||||
{
|
{
|
||||||
Ecore_Event_Mouse_Move *ev;
|
Ecore_Event_Mouse_Move *ev;
|
||||||
Eina_List *l, *tmp = NULL;
|
Eina_List *l, *tmp;
|
||||||
|
E_Menu *m;
|
||||||
int dx, dy, d;
|
int dx, dy, d;
|
||||||
double dt;
|
double dt;
|
||||||
double fast_move_threshold;
|
double fast_move_threshold;
|
||||||
|
@ -2728,16 +2681,10 @@ _e_menu_cb_mouse_move(void *data, int type, void *event)
|
||||||
if ((dt > 0.0) && ((d / dt) >= (fast_move_threshold * fast_move_threshold)))
|
if ((dt > 0.0) && ((d / dt) >= (fast_move_threshold * fast_move_threshold)))
|
||||||
is_fast = 1;
|
is_fast = 1;
|
||||||
|
|
||||||
for (l = _e_active_menus; l; l = l->next)
|
tmp = _e_active_menus_copy_ref();
|
||||||
|
|
||||||
|
EINA_LIST_FOREACH(_e_active_menus, l, m)
|
||||||
{
|
{
|
||||||
tmp = eina_list_append(tmp, l->data);
|
|
||||||
e_object_ref(E_OBJECT(l->data));
|
|
||||||
}
|
|
||||||
for (l = _e_active_menus; l; l = l->next)
|
|
||||||
{
|
|
||||||
E_Menu *m;
|
|
||||||
|
|
||||||
m = l->data;
|
|
||||||
if ((m->realized) && (m->cur.visible))
|
if ((m->realized) && (m->cur.visible))
|
||||||
{
|
{
|
||||||
if (is_fast)
|
if (is_fast)
|
||||||
|
@ -2761,12 +2708,9 @@ _e_menu_cb_mouse_move(void *data, int type, void *event)
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (tmp)
|
|
||||||
{
|
_e_menu_list_free_unref(tmp);
|
||||||
e_object_unref(E_OBJECT(tmp->data));
|
|
||||||
tmp = eina_list_remove_list(tmp, tmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
_e_menu_x = ev->x;
|
_e_menu_x = ev->x;
|
||||||
_e_menu_y = ev->y;
|
_e_menu_y = ev->y;
|
||||||
_e_menu_time = ev->timestamp;
|
_e_menu_time = ev->timestamp;
|
||||||
|
@ -2853,13 +2797,11 @@ _e_menu_cb_window_shape(void *data, int ev_type, void *ev)
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
Ecore_X_Event_Window_Shape *e;
|
Ecore_X_Event_Window_Shape *e;
|
||||||
|
E_Menu *m;
|
||||||
|
|
||||||
e = ev;
|
e = ev;
|
||||||
for (l = _e_active_menus; l; l = l->next)
|
EINA_LIST_FOREACH(_e_active_menus, l, m)
|
||||||
{
|
{
|
||||||
E_Menu *m;
|
|
||||||
|
|
||||||
m = l->data;
|
|
||||||
if (m->evas_win == e->win)
|
if (m->evas_win == e->win)
|
||||||
m->need_shape_export = 1;
|
m->need_shape_export = 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -184,7 +184,7 @@ EAPI E_Menu *e_menu_root_get(E_Menu *m);
|
||||||
|
|
||||||
EAPI E_Menu_Item *e_menu_item_new(E_Menu *m);
|
EAPI E_Menu_Item *e_menu_item_new(E_Menu *m);
|
||||||
EAPI E_Menu_Item *e_menu_item_nth(E_Menu *m, int n);
|
EAPI E_Menu_Item *e_menu_item_nth(E_Menu *m, int n);
|
||||||
EAPI int e_menu_item_num_get(E_Menu_Item *mi);
|
EAPI int e_menu_item_num_get(const E_Menu_Item *mi);
|
||||||
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_label_set(E_Menu_Item *mi, const char *label);
|
EAPI void e_menu_item_label_set(E_Menu_Item *mi, const char *label);
|
||||||
|
|
Loading…
Reference in New Issue