Fix memory leaks: return value of elm_genlist_realized_items_get

should be freed
This commit is contained in:
Tae-Hwan Kim 2013-03-13 20:25:12 +09:00 committed by Carsten Haitzler (Rasterman)
parent d4bc61f941
commit 263ad756ba
3 changed files with 15 additions and 10 deletions

View File

@ -1149,3 +1149,7 @@
2013-03-13 WooHyun Jung 2013-03-13 WooHyun Jung
* Fixed a bug in elm_list. Focus_next is needed only when access mode is enabled. * Fixed a bug in elm_list. Focus_next is needed only when access mode is enabled.
2013-03-13 Tae-Hwan Kim (bluezery)
* Fix a memory leak in elm_genlist. Return value of elm_genlist_realized_items_get should be freed

View File

@ -183,6 +183,7 @@ Fixes:
* Fixed a bug that naviframe's focus_next didn't work after changing evenry item to elm_layout. * Fixed a bug that naviframe's focus_next didn't work after changing evenry item to elm_layout.
* Entry: Fixed a bug with text appending. * Entry: Fixed a bug with text appending.
* Fixed a bug in elm_list. Focus_next is needed only when access mode is enabled. * Fixed a bug in elm_list. Focus_next is needed only when access mode is enabled.
* Fix a memory leak of elm_genlist - EINA_LIST_FREE should be used for returned value of elm_genlist_realized_items_get
Removals: Removals:

View File

@ -3151,7 +3151,7 @@ _long_press_cb(void *data)
{ {
Elm_Gen_Item *it = data, *it_tmp; Elm_Gen_Item *it = data, *it_tmp;
Elm_Genlist_Smart_Data *sd; Elm_Genlist_Smart_Data *sd;
Eina_List *list, *l; Eina_List *list;
sd = GL_IT(it)->wsd; sd = GL_IT(it)->wsd;
@ -3177,10 +3177,9 @@ _long_press_cb(void *data)
list = elm_genlist_realized_items_get list = elm_genlist_realized_items_get
((GL_IT(it)->wsd)->obj); ((GL_IT(it)->wsd)->obj);
EINA_LIST_FOREACH(list, l, it_tmp) EINA_LIST_FREE(list, it_tmp)
{ if (it != it_tmp) _item_unselect(it_tmp);
if (it != it_tmp) _item_unselect(it_tmp);
}
if (elm_genlist_item_expanded_get((Elm_Object_Item *)it)) if (elm_genlist_item_expanded_get((Elm_Object_Item *)it))
{ {
elm_genlist_item_expanded_set((Elm_Object_Item *)it, EINA_FALSE); elm_genlist_item_expanded_set((Elm_Object_Item *)it, EINA_FALSE);
@ -6793,11 +6792,11 @@ elm_genlist_realized_items_update(Evas_Object *obj)
static void static void
_realized_items_update(Eo *obj, void *_pd EINA_UNUSED, va_list *list_unused EINA_UNUSED) _realized_items_update(Eo *obj, void *_pd EINA_UNUSED, va_list *list_unused EINA_UNUSED)
{ {
Eina_List *list, *l; Eina_List *list;
Elm_Object_Item *it; Elm_Object_Item *it;
list = elm_genlist_realized_items_get(obj); list = elm_genlist_realized_items_get(obj);
EINA_LIST_FOREACH(list, l, it) EINA_LIST_FREE(list, it)
elm_genlist_item_update(it); elm_genlist_item_update(it);
} }
@ -6905,7 +6904,7 @@ static void
_decorate_mode_set(Eo *obj, void *_pd, va_list *valist) _decorate_mode_set(Eo *obj, void *_pd, va_list *valist)
{ {
Elm_Gen_Item *it; Elm_Gen_Item *it;
Eina_List *list, *l; Eina_List *list;
Elm_Object_Item *deco_it; Elm_Object_Item *deco_it;
Eina_Bool decorated = va_arg(*valist, int); Eina_Bool decorated = va_arg(*valist, int);
@ -6925,7 +6924,7 @@ _decorate_mode_set(Eo *obj, void *_pd, va_list *valist)
list = elm_genlist_realized_items_get(obj); list = elm_genlist_realized_items_get(obj);
if (!sd->decorate_all_mode) if (!sd->decorate_all_mode)
{ {
EINA_LIST_FOREACH(list, l, it) EINA_LIST_FREE(list, it)
{ {
if (it->item->type != ELM_GENLIST_ITEM_GROUP) if (it->item->type != ELM_GENLIST_ITEM_GROUP)
_decorate_all_item_unrealize(it); _decorate_all_item_unrealize(it);
@ -6944,7 +6943,7 @@ _decorate_mode_set(Eo *obj, void *_pd, va_list *valist)
_decorate_item_finished_signal_cb(deco_it, obj, NULL, NULL); _decorate_item_finished_signal_cb(deco_it, obj, NULL, NULL);
} }
EINA_LIST_FOREACH(list, l, it) EINA_LIST_FREE(list, it)
{ {
if (it->item->type != ELM_GENLIST_ITEM_GROUP) if (it->item->type != ELM_GENLIST_ITEM_GROUP)
{ {
@ -6953,6 +6952,7 @@ _decorate_mode_set(Eo *obj, void *_pd, va_list *valist)
} }
} }
} }
if (sd->calc_job) ecore_job_del(sd->calc_job); if (sd->calc_job) ecore_job_del(sd->calc_job);
sd->calc_job = ecore_job_add(_calc_job, sd); sd->calc_job = ecore_job_add(_calc_job, sd);
} }