gengrid, genlist, list, toolbar: Fix memory leak and enhance performance.

1. Fix memory leak by freeing eina_list.
2. Enhance performance by getting the item list when it is really
needed.

@fix
This commit is contained in:
Daniel Juyung Seo 2014-12-26 18:40:14 +09:00
parent 9b038471bf
commit d47a4adae4
4 changed files with 33 additions and 18 deletions

View File

@ -3003,8 +3003,6 @@ _elm_gengrid_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *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_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))
@ -3013,6 +3011,8 @@ _elm_gengrid_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *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)
@ -3021,7 +3021,10 @@ _elm_gengrid_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *eo_it)
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
@ -3032,7 +3035,10 @@ _elm_gengrid_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *eo_it)
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;

View File

@ -3065,8 +3065,6 @@ _elm_genlist_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *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))
@ -3075,6 +3073,8 @@ _elm_genlist_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *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)
@ -3083,7 +3083,10 @@ _elm_genlist_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *eo_it)
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
@ -3094,7 +3097,10 @@ _elm_genlist_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *eo_it)
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;

View File

@ -1203,8 +1203,6 @@ _elm_list_nearest_visible_item_get(Evas_Object *obj, Elm_List_Item_Data *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)))
@ -1213,6 +1211,8 @@ _elm_list_nearest_visible_item_get(Evas_Object *obj, Elm_List_Item_Data *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)
@ -1223,7 +1223,10 @@ _elm_list_nearest_visible_item_get(Evas_Object *obj, Elm_List_Item_Data *it)
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
@ -1234,7 +1237,10 @@ _elm_list_nearest_visible_item_get(Evas_Object *obj, Elm_List_Item_Data *it)
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;

View File

@ -685,19 +685,16 @@ _elm_toolbar_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *eo_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)