evas: allow list for _evas_event_object_list_in_get utility function.

This commit is contained in:
Cedric BAIL 2017-06-14 12:20:36 -07:00
parent 37aa0855e6
commit b312729109
1 changed files with 43 additions and 19 deletions

View File

@ -10,7 +10,10 @@ int _evas_event_counter = 0;
static Eina_List *
_evas_event_object_list_in_get(Evas *eo_e, Eina_List *in,
const Eina_Inlist *list, const Eina_Clist *clist, Evas_Object *stop,
const Eina_Inlist *list,
const Eina_Clist *clist,
const Eina_List *list,
Evas_Object *stop,
int x, int y, int *no_rep, Eina_Bool source);
/* FIXME: use eina_list_clone */
@ -260,6 +263,7 @@ _evas_event_object_list_raw_in_get_single(Evas *eo_e, Evas_Object_Protected_Data
(eo_e, in,
evas_object_smart_members_get_direct(eo_obj),
NULL,
NULL,
stop,
obj->cur->geometry.x + obj->map->cur.map->mx,
obj->cur->geometry.y + obj->map->cur.map->my,
@ -286,7 +290,7 @@ _evas_event_object_list_raw_in_get_single(Evas *eo_e, Evas_Object_Protected_Data
obj->cur->geometry.y <= y &&
obj->cur->geometry.y + obj->cur->geometry.h >= y))
in = _evas_event_object_list_in_get
(eo_e, in, evas_object_smart_members_get_direct(eo_obj), NULL,
(eo_e, in, evas_object_smart_members_get_direct(eo_obj), NULL, NULL,
stop, x, y, &norep, source);
}
if (norep)
@ -306,7 +310,7 @@ _evas_event_object_list_raw_in_get_single(Evas *eo_e, Evas_Object_Protected_Data
{
int norep = 0;
in = _evas_event_object_list_in_get(eo_e, in,
NULL, evas_object_event_grabber_members_list(eo_obj),
NULL, evas_object_event_grabber_members_list(eo_obj), NULL,
stop, x, y, &norep, source);
if (norep)
{
@ -367,7 +371,10 @@ _evas_event_object_list_raw_in_get_single(Evas *eo_e, Evas_Object_Protected_Data
static Eina_List *
_evas_event_object_list_raw_in_get(Evas *eo_e, Eina_List *in,
const Eina_Inlist *list, const Eina_Clist *clist, Evas_Object *stop,
const Eina_Inlist *ilist,
const Eina_Clist *clist,
const Eina_List *list,
Evas_Object *stop,
int x, int y, int *no_rep, Eina_Bool source)
{
Evas_Object_Protected_Data *obj = NULL;
@ -377,13 +384,13 @@ _evas_event_object_list_raw_in_get(Evas *eo_e, Eina_List *in,
static int spaces = 0;
#endif
if ((!list) && (!clist)) return in;
if ((!ilist) && (!clist) && (!list)) return in;
#ifdef DDD_DO
spaces++;
#endif
if (list)
if (ilist)
{
for (obj = _EINA_INLIST_CONTAINER(obj, eina_inlist_last(list));
for (obj = _EINA_INLIST_CONTAINER(obj, eina_inlist_last(ilist));
obj;
obj = _EINA_INLIST_CONTAINER(obj, EINA_INLIST_GET(obj)->prev))
{
@ -396,7 +403,7 @@ _evas_event_object_list_raw_in_get(Evas *eo_e, Eina_List *in,
if (*no_rep) return in;
}
}
else
else if (clist)
{
EINA_CLIST_FOR_EACH_ENTRY_SAFE_REV(obj, nobj, clist, Evas_Object_Protected_Data, events->event.member)
{
@ -408,6 +415,20 @@ _evas_event_object_list_raw_in_get(Evas *eo_e, Eina_List *in,
if (*no_rep) return in;
}
}
else
{
Eina_List *l;
EINA_LIST_REVERSE_FOREACH(list, l, obj)
{
in = _evas_event_object_list_raw_in_get_single(eo_e, obj, in, stop, x, y, no_rep, source
#ifdef DDD_DO
,&spaces
#endif
);
if (*no_rep) return in;
}
}
*no_rep = 0;
#ifdef DDD_DO
spaces--;
@ -491,14 +512,14 @@ _evas_event_source_mouse_down_events(Evas_Object *eo_obj, Evas *eo_e,
{
proxy_write->src_event_in = _evas_event_object_list_raw_in_get
(eo_e, proxy_write->src_event_in,
evas_object_smart_members_get_direct(eo_src), NULL,
evas_object_smart_members_get_direct(eo_src), NULL, NULL,
NULL, ev->cur.x, ev->cur.y, &no_rep, EINA_TRUE);
}
else if (src->is_event_parent)
{
proxy_write->src_event_in = _evas_event_object_list_raw_in_get
(eo_e, proxy_write->src_event_in,
NULL, evas_object_event_grabber_members_list(eo_src),
NULL, evas_object_event_grabber_members_list(eo_src), NULL,
NULL, ev->cur.x, ev->cur.y, &no_rep, EINA_TRUE);
}
else
@ -675,13 +696,13 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, Evas *eo_e,
{
int no_rep = 0;
ins = _evas_event_object_list_raw_in_get(eo_e, ins, evas_object_smart_members_get_direct(eo_src),
NULL, NULL, ev->cur.x, ev->cur.y, &no_rep, EINA_TRUE);
NULL, NULL, NULL, ev->cur.x, ev->cur.y, &no_rep, EINA_TRUE);
}
else if (src->is_event_parent)
{
int no_rep = 0;
ins = _evas_event_object_list_raw_in_get(eo_e, ins, NULL, evas_object_event_grabber_members_list(eo_src),
NULL, ev->cur.x, ev->cur.y, &no_rep, EINA_TRUE);
NULL, NULL, ev->cur.x, ev->cur.y, &no_rep, EINA_TRUE);
}
else
ins = eina_list_append(ins, eo_src);
@ -1122,14 +1143,14 @@ _evas_event_source_multi_move_events(Evas_Object_Protected_Data *obj, Evas_Publi
{
int no_rep = 0;
ins = _evas_event_object_list_raw_in_get
(eo_e, ins, evas_object_smart_members_get_direct(eo_src), NULL, NULL,
(eo_e, ins, evas_object_smart_members_get_direct(eo_src), NULL, NULL, NULL,
ev->cur.x, ev->cur.y, &no_rep, EINA_TRUE);
}
if (src->is_event_parent)
{
int no_rep = 0;
ins = _evas_event_object_list_raw_in_get
(eo_e, ins, NULL, evas_object_event_grabber_members_list(eo_src), NULL,
(eo_e, ins, NULL, evas_object_event_grabber_members_list(eo_src), NULL, NULL,
ev->cur.x, ev->cur.y, &no_rep, EINA_TRUE);
}
else
@ -1215,14 +1236,14 @@ _evas_event_source_mouse_in_events(Evas_Object *eo_obj, Evas *eo_e,
{
int no_rep = 0;
ins = _evas_event_object_list_raw_in_get(eo_e, ins, evas_object_smart_members_get_direct(eo_src),
NULL, NULL, ev->cur.x, ev->cur.y, &no_rep, EINA_TRUE);
NULL, NULL, NULL, ev->cur.x, ev->cur.y, &no_rep, EINA_TRUE);
}
else if (src->is_event_parent)
{
int no_rep = 0;
ins = _evas_event_object_list_raw_in_get(eo_e, ins, NULL, evas_object_event_grabber_members_list(eo_src),
NULL, ev->cur.x, ev->cur.y, &no_rep, EINA_TRUE);
NULL, NULL, ev->cur.x, ev->cur.y, &no_rep, EINA_TRUE);
}
else
@ -1326,10 +1347,13 @@ _evas_event_source_mouse_out_events(Evas_Object *eo_obj, Evas *eo_e,
static Eina_List *
_evas_event_object_list_in_get(Evas *eo_e, Eina_List *in,
const Eina_Inlist *list, const Eina_Clist *clist, Evas_Object *stop,
const Eina_Inlist *ilist,
const Eina_Clist *clist,
const Eina_List *list,
Evas_Object *stop,
int x, int y, int *no_rep, Eina_Bool source)
{
return _evas_event_object_list_raw_in_get(eo_e, in, list, clist, stop, x, y,
return _evas_event_object_list_raw_in_get(eo_e, in, ilist, clist, list, stop, x, y,
no_rep, source);
}
@ -1348,7 +1372,7 @@ _evas_event_objects_event_list_no_frozen_check(Evas *eo_e, Evas_Object *stop, in
int no_rep = 0;
D("############################# check layer %i\n", lay->layer);
in = _evas_event_object_list_in_get(eo_e, in,
EINA_INLIST_GET(lay->objects), NULL,
EINA_INLIST_GET(lay->objects), NULL, NULL,
stop, x, y, &no_rep, EINA_FALSE);
if (no_rep) return in;
}