forked from enlightenment/efl
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:
parent
9b038471bf
commit
d47a4adae4
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue