seoz pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=8b1284d3f4b9768b74a6363e10cf2dc608d0956f
commit 8b1284d3f4b9768b74a6363e10cf2dc608d0956f Author: Daniel Juyung Seo <[email protected]> Date: Sun Mar 9 02:55:35 2014 +0900 list/genlist/gengrid: Clear some internal variables when an item is deleted. Set last_selected_item, last_focused_item, focused_item to NULL when the item is deleted. For genlist and gengrid, clear them in del_not_serious. --- src/lib/elm_gengrid.c | 4 ++-- src/lib/elm_genlist.c | 8 ++++++-- src/lib/elm_list.c | 7 +++++++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/lib/elm_gengrid.c b/src/lib/elm_gengrid.c index 6462ab3..9c09310 100644 --- a/src/lib/elm_gengrid.c +++ b/src/lib/elm_gengrid.c @@ -2028,6 +2028,8 @@ _elm_gengrid_item_del_not_serious(Elm_Gen_Item *it) if (it->selected) sd->selected = eina_list_remove(sd->selected, it); + if (sd->last_selected_item == (Elm_Object_Item *)it) + sd->last_selected_item = NULL; if (it->itc->func.del) it->itc->func.del((void *)it->base.data, WIDGET(it)); @@ -2051,8 +2053,6 @@ _elm_gengrid_item_del_serious(Elm_Gen_Item *it) ecore_job_del(sd->calc_job); sd->calc_job = ecore_job_add(sd->calc_cb, sd->obj); - if (sd->last_selected_item == (Elm_Object_Item *)it) - sd->last_selected_item = NULL; sd->item_count--; ELM_SAFE_FREE(it->item, free); diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c index ef5bd06..8937861 100644 --- a/src/lib/elm_genlist.c +++ b/src/lib/elm_genlist.c @@ -3227,6 +3227,12 @@ _elm_genlist_item_del_not_serious(Elm_Gen_Item *it) if (it->selected) sd->selected = eina_list_remove(sd->selected, it); + if (sd->last_focused_item == (Elm_Object_Item *)it) + sd->last_focused_item = NULL; + if (sd->focused_item == (Elm_Object_Item *)it) + sd->focused_item = NULL; + if (sd->last_selected_item == (Elm_Object_Item *)it) + sd->last_selected_item = NULL; if (it->itc->func.del) it->itc->func.del((void *)it->base.data, WIDGET(it)); @@ -3251,8 +3257,6 @@ _elm_genlist_item_del_serious(Elm_Gen_Item *it) ecore_job_del(sd->calc_job); sd->calc_job = ecore_job_add(_calc_job, sd->obj); - if (sd->last_selected_item == (Elm_Object_Item *)it) - sd->last_selected_item = NULL; sd->item_count--; ELM_SAFE_FREE(it->item, free); diff --git a/src/lib/elm_list.c b/src/lib/elm_list.c index 8df8f48..3b0ddd1 100644 --- a/src/lib/elm_list.c +++ b/src/lib/elm_list.c @@ -1670,6 +1670,13 @@ _item_del_pre_hook(Elm_Object_Item *it) sd->items = eina_list_remove_list(sd->items, item->node); + if (sd->focused_item == (Elm_Object_Item *)it) + sd->focused_item = NULL; + if (sd->last_focused_item == (Elm_Object_Item *)it) + sd->last_focused_item = NULL; + if (sd->last_selected_item == (Elm_Object_Item *)it) + sd->last_selected_item = NULL; + evas_object_ref(obj); _elm_list_walk(sd); --
