elm/list: use while() loop to iterate item list during smart delete
authorMike Blumenkrantz <zmike@samsung.com>
Wed, 15 Aug 2018 08:45:06 +0000 (09:45 +0100)
committerShinwoo Kim <cinoo.kim@samsung.com>
Fri, 17 Aug 2018 04:15:04 +0000 (13:15 +0900)
Summary:
using EINA_LIST_FREE here double deletes 2 list items on every iteration
due to recursive list removals, which prevents some items from being
deleted as expected

fix T7266

Reviewers: netstar

Reviewed By: netstar

Subscribers: netstar, cedric, #reviewers, #committers

Tags: #efl_widgets

Maniphest Tasks: T7266

Differential Revision: https://phab.enlightenment.org/D6829

src/lib/elementary/elm_list.c

index 5bce890..1e1b429 100644 (file)
@@ -2536,8 +2536,9 @@ _elm_list_efl_canvas_group_group_del(Eo *obj, Elm_List_Data *sd)
    evas_object_event_callback_del
      (sd->box, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _size_hints_changed_cb);
 
-   EINA_LIST_FREE(sd->items, eo_it)
-     efl_del(eo_it);
+   while (sd->items)
+     /* will be removed from list in _elm_list_item_elm_widget_item_del_pre */
+     efl_del(eina_list_data_get(sd->items));
 
    sd->selected = eina_list_free(sd->selected);