diff --git a/src/bin/e_layout.c b/src/bin/e_layout.c index 646271c7c..ad7ddd424 100644 --- a/src/bin/e_layout.c +++ b/src/bin/e_layout.c @@ -266,6 +266,24 @@ e_layout_children_get(Evas_Object *obj) return l; } +EAPI Evas_Object * +e_layout_top_child_at_xy_get(Evas_Object *obj, Evas_Coord x, Evas_Coord y, const Eina_List *ignore) +{ + E_Smart_Data *sd; + E_Layout_Item *li; + + if (evas_object_smart_smart_get(obj) != _e_smart) SMARTERRNR() NULL; + sd = evas_object_smart_data_get(obj); + if (!sd->items) return NULL; + EINA_INLIST_REVERSE_FOREACH(sd->items, li) + if (E_INSIDE(x, y, li->x, li->y, li->w, li->h)) + { + if (eina_list_data_find(ignore, li->obj)) continue; + return li->obj; + } + return NULL; +} + /* local subsystem functions */ static E_Layout_Item * _e_layout_smart_adopt(E_Smart_Data *sd, Evas_Object *obj) diff --git a/src/bin/e_layout.h b/src/bin/e_layout.h index 859180631..0e6ef59c2 100644 --- a/src/bin/e_layout.h +++ b/src/bin/e_layout.h @@ -23,6 +23,7 @@ EAPI void e_layout_child_geometry_get(Evas_Object *obj, Evas_Coord *x, E EAPI void e_layout_unpack (Evas_Object *obj); EAPI Eina_List *e_layout_children_get(Evas_Object *obj); +EAPI Evas_Object *e_layout_top_child_at_xy_get(Evas_Object *obj, Evas_Coord x, Evas_Coord y, const Eina_List *ignore); #endif #endif