From: Hyoyoung Chang <hyoyoung@gmail.com>
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 18 Apr 2012 10:43:51 +0000 (10:43 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 18 Apr 2012 10:43:51 +0000 (10:43 +0000)
Subject: [E-devel] [patch] elm_genlist - bugfix at item flipped

I made a small patch about item flipped.
It resolves two bugs

1. flip_set and unset is called quickly, sometimes genlist can't free
flipped data.
it fixed to remove checking flipped status in item unrealize

2. add item unhighlight at flip_job

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@70306 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/elm_genlist.c

index dd1842e..05dadf1 100644 (file)
@@ -5642,10 +5642,13 @@ elm_genlist_item_class_unref(Elm_Genlist_Item_Class *itc)
 void _flip_job(void *data)
 {
    Elm_Gen_Item *it = (Elm_Gen_Item *) data;
+   _item_unhighlight(it);
+   _item_unselect(it);
    _elm_genlist_item_unrealize(it, EINA_FALSE);
-   if (it->selected) _item_unselect(it);
    it->flipped = EINA_TRUE;
    it->item->nocache = EINA_TRUE;
+   if (it->wd->calc_job) ecore_job_del(it->wd->calc_job);
+   it->wd->calc_job = ecore_job_add(_calc_job, it->wd);
 }
 
 EAPI void
@@ -5661,8 +5664,6 @@ elm_genlist_item_flip_set(Elm_Object_Item *it,
    if (flip)
      {
         ecore_job_add(_flip_job, _it);
-        if (_it->wd->calc_job) ecore_job_del(_it->wd->calc_job);
-        _it->wd->calc_job = ecore_job_add(_calc_job, _it->wd);
      }
    else
      {
@@ -5876,13 +5877,10 @@ _elm_genlist_item_unrealize(Elm_Gen_Item *it,
    EINA_LIST_FREE(it->content_objs, content)
      evas_object_del(content);
 
-   if (it->flipped)
-     {
-        elm_widget_stringlist_free(it->item->flip_contents);
-        it->item->flip_contents = NULL;
-        EINA_LIST_FREE(it->item->flip_content_objs, content)
-          evas_object_del(content);
-     }
+   elm_widget_stringlist_free(it->item->flip_contents);
+   it->item->flip_contents = NULL;
+   EINA_LIST_FREE(it->item->flip_content_objs, content)
+     evas_object_del(content);
 
    it->unrealize_cb(it);