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);
 

-- 


Reply via email to