1. Fix memory leak by freeing eina_list.
2. Enhance performance by getting the item list when it is really
needed.
@fix
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
- item_list = elm_gengrid_realized_items_get(obj);
-
if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, ix, iy, iw, ih))
{
if (!elm_object_item_disabled_get(eo_it))
search_next = EINA_TRUE;
}
+ item_list = elm_gengrid_realized_items_get(obj);
+
if ((iy < vy) || search_next)
{
EINA_LIST_FOREACH(item_list, l, eo_item)
evas_object_geometry_get(VIEW(item), &cx, &cy, &cw, &ch);
if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, cx, cy, cw, ch) &&
!elm_object_item_disabled_get(eo_item))
- return eo_item;
+ {
+ eina_list_free(item_list);
+ return eo_item;
+ }
}
}
else
evas_object_geometry_get(VIEW(item), &cx, &cy, &cw, &ch);
if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, cx, cy, cw, ch) &&
!elm_object_item_disabled_get(eo_item))
- return eo_item;
+ {
+ eina_list_free(item_list);
+ return eo_item;
+ }
}
}
return eo_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
- item_list = elm_genlist_realized_items_get(obj);
-
if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, ix, iy, iw, ih))
{
if (!elm_object_item_disabled_get(eo_it))
search_next = EINA_TRUE;
}
+ item_list = elm_genlist_realized_items_get(obj);
+
if ((iy < vy) || search_next)
{
EINA_LIST_FOREACH(item_list, l, eo_item)
evas_object_geometry_get(VIEW(item), &cx, &cy, &cw, &ch);
if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, cx, cy, cw, ch) &&
!elm_object_item_disabled_get(eo_item))
- return eo_item;
+ {
+ eina_list_free(item_list);
+ return eo_item;
+ }
}
}
else
evas_object_geometry_get(VIEW(item), &cx, &cy, &cw, &ch);
if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, cx, cy, cw, ch) &&
!elm_object_item_disabled_get(eo_item))
- return eo_item;
+ {
+ eina_list_free(item_list);
+ return eo_item;
+ }
}
}
return eo_it;
evas_object_geometry_get(obj, &vx, &vy, &vw, &vh);
evas_object_geometry_get(VIEW(it), &ix, &iy, &iw, &ih);
- item_list = eina_list_data_find_list(sd->items, EO_OBJ(it));
-
if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, ix, iy, iw, ih))
{
if (!elm_object_item_disabled_get(EO_OBJ(it)))
search_next = EINA_TRUE;
}
+ item_list = eina_list_data_find_list(sd->items, EO_OBJ(it));
+
if ((!sd->h_mode && (iy < vy)) ||
(sd->h_mode && (iw < vw)) ||
search_next)
evas_object_geometry_get(VIEW(item), &cx, &cy, &cw, &ch);
if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, cx, cy, cw, ch) &&
!elm_object_item_disabled_get(EO_OBJ(item)))
- return item;
+ {
+ eina_list_free(item_list);
+ return item;
+ }
}
}
else
evas_object_geometry_get(VIEW(item), &cx, &cy, &cw, &ch);
if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, cx, cy, cw, ch) &&
!elm_object_item_disabled_get(EO_OBJ(item)))
- return item;
+ {
+ eina_list_free(item_list);
+ return item;
+ }
}
}
return it;
evas_object_geometry_get(obj, &vx, &vy, &vw, &vh);
evas_object_geometry_get(VIEW(it), &ix, &iy, &iw, &ih);
- item_list = evas_object_box_children_get(sd->bx);
-
if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, ix, iy, iw, ih))
{
if (!elm_object_item_disabled_get(eo_it))
- {
- eina_list_free(item_list);
- return eo_it;
- }
+ return eo_it;
else
search_next = EINA_TRUE;
}
+ item_list = evas_object_box_children_get(sd->bx);
+
if ((sd->vertical && (iy < vy)) ||
(!sd->vertical && (iw < vw)) ||
search_next)