summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Juyung Seo <seojuyung2@gmail.com>2014-12-26 18:40:14 +0900
committerDaniel Juyung Seo <seojuyung2@gmail.com>2014-12-26 19:30:07 +0900
commit6ac2038023550cc4581d7133e1cebfe38bfb7c10 (patch)
treed088275e434e1d98fe308fdb2297df41f068d77d
parent341d0d4cfe4cff03c7fcaca6e1994a4ccbbae053 (diff)
downloadelementary-6ac2038023550cc4581d7133e1cebfe38bfb7c10.tar.gz
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 Conflicts: src/lib/elm_gengrid.c src/lib/elm_genlist.c src/lib/elm_list.c src/lib/elm_toolbar.c
-rw-r--r--src/lib/elm_gengrid.c14
-rw-r--r--src/lib/elm_genlist.c14
-rw-r--r--src/lib/elm_list.c14
-rw-r--r--src/lib/elm_toolbar.c9
4 files changed, 33 insertions, 18 deletions
diff --git a/src/lib/elm_gengrid.c b/src/lib/elm_gengrid.c
index 9c2605b79..c8f8d33a0 100644
--- a/src/lib/elm_gengrid.c
+++ b/src/lib/elm_gengrid.c
@@ -2941,8 +2941,6 @@ _elm_gengrid_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *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(it))
@@ -2951,6 +2949,8 @@ _elm_gengrid_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *it)
search_next = EINA_TRUE;
}
+ item_list = elm_gengrid_realized_items_get(obj);
+
if ((iy < vy) || search_next)
{
EINA_LIST_FOREACH(item_list, l, item)
@@ -2958,7 +2958,10 @@ _elm_gengrid_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *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(item))
- return item;
+ {
+ eina_list_free(item_list);
+ return item;
+ }
}
}
else
@@ -2968,7 +2971,10 @@ _elm_gengrid_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *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(item))
- return item;
+ {
+ eina_list_free(item_list);
+ return item;
+ }
}
}
return it;
diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c
index 882188a56..453e69308 100644
--- a/src/lib/elm_genlist.c
+++ b/src/lib/elm_genlist.c
@@ -2911,8 +2911,6 @@ _elm_genlist_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *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(it))
@@ -2921,6 +2919,8 @@ _elm_genlist_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *it)
search_next = EINA_TRUE;
}
+ item_list = elm_genlist_realized_items_get(obj);
+
if ((iy < vy) || search_next)
{
EINA_LIST_FOREACH(item_list, l, item)
@@ -2928,7 +2928,10 @@ _elm_genlist_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *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(item))
- return item;
+ {
+ eina_list_free(item_list);
+ return item;
+ }
}
}
else
@@ -2938,7 +2941,10 @@ _elm_genlist_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *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(item))
- return item;
+ {
+ eina_list_free(item_list);
+ return item;
+ }
}
}
return it;
diff --git a/src/lib/elm_list.c b/src/lib/elm_list.c
index 37c3b9d2b..54f4ddce5 100644
--- a/src/lib/elm_list.c
+++ b/src/lib/elm_list.c
@@ -1189,8 +1189,6 @@ _elm_list_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *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, it);
-
if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, ix, iy, iw, ih))
{
if (!elm_object_item_disabled_get(it))
@@ -1199,6 +1197,8 @@ _elm_list_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *it)
search_next = EINA_TRUE;
}
+ item_list = eina_list_data_find_list(sd->items, it);
+
if ((!sd->h_mode && (iy < vy)) ||
(sd->h_mode && (iw < vw)) ||
search_next)
@@ -1209,7 +1209,10 @@ _elm_list_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *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(item))
- return item;
+ {
+ eina_list_free(item_list);
+ return item;
+ }
}
}
else
@@ -1220,7 +1223,10 @@ _elm_list_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *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(item))
- return item;
+ {
+ eina_list_free(item_list);
+ return item;
+ }
}
}
return it;
diff --git a/src/lib/elm_toolbar.c b/src/lib/elm_toolbar.c
index 109b03b49..62b6d5ee4 100644
--- a/src/lib/elm_toolbar.c
+++ b/src/lib/elm_toolbar.c
@@ -679,19 +679,16 @@ _elm_toolbar_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *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(it))
- {
- eina_list_free(item_list);
- return it;
- }
+ return 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)