summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@samsung.com>2019-05-30 13:09:10 -0400
committerMike Blumenkrantz <zmike@samsung.com>2019-05-30 13:09:10 -0400
commitca5b68a6203a6947739c9e72c5bef5e6071de325 (patch)
treec2669165f69b1d0fa987691b11bfa66b35e47abb
parent5292729e376338472a025c3bf27f6c80e755e445 (diff)
downloadefl-ca5b68a6203a6947739c9e72c5bef5e6071de325.tar.gz
elm/gengrid: handle gengrid finding of nearest visible item when not realized
Summary: FIXME-- @fix Depends on D8960 Reviewers: cedric Reviewed By: cedric Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D8961
-rw-r--r--src/lib/elementary/elm_gengrid.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/src/lib/elementary/elm_gengrid.c b/src/lib/elementary/elm_gengrid.c
index 8a5bd597ef..8c36f4b722 100644
--- a/src/lib/elementary/elm_gengrid.c
+++ b/src/lib/elementary/elm_gengrid.c
@@ -3505,7 +3505,7 @@ _elm_gengrid_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *eo_it)
Evas_Coord ix = 0, iy = 0, iw = 0, ih = 0; // given item geometry
Evas_Coord cx = 0, cy = 0, cw = 0, ch = 0; // candidate item geometry
Eina_List *item_list = NULL, *l = NULL;
- Elm_Object_Item *eo_item = NULL;
+ Elm_Object_Item *first_item, *eo_item = NULL;
ELM_GENGRID_DATA_GET(obj, sd);
Eina_Bool search_next = EINA_FALSE;
@@ -3513,19 +3513,26 @@ _elm_gengrid_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *eo_it)
ELM_GENGRID_ITEM_DATA_GET(eo_it, it);
evas_object_geometry_get(sd->pan_obj, &vx, &vy, &vw, &vh);
- evas_object_geometry_get(VIEW(it), &ix, &iy, &iw, &ih); // FIXME: check if the item is realized or not
-
- if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, ix, iy, iw, ih))
+ if (it->realized)
{
- if (!elm_object_item_disabled_get(eo_it))
- return eo_it;
- else
- search_next = EINA_TRUE;
+ evas_object_geometry_get(VIEW(it), &ix, &iy, &iw, &ih);
+
+ if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, ix, iy, iw, ih))
+ {
+ if (!elm_object_item_disabled_get(eo_it))
+ return eo_it;
+ else
+ search_next = EINA_TRUE;
+ }
}
item_list = elm_gengrid_realized_items_get(obj);
+ /* if first realized item is before parameter item then parameter item is
+ * off viewport towards bottom: start at end of list */
+ first_item = eina_list_data_get(item_list);
+ ELM_GENGRID_ITEM_DATA_GET(first_item, first_it);
- if ((iy < vy) || search_next)
+ if ((iy < vy) || search_next || (!first_it) || (first_it->position > it->position))
{
EINA_LIST_FOREACH(item_list, l, eo_item)
{
@@ -3555,7 +3562,7 @@ _elm_gengrid_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *eo_it)
}
eina_list_free(item_list);
- return eo_it;
+ return it->realized ? eo_it : NULL;
}
EOLIAN static Eina_Rect