[store] Fixed the miss poiter problem of the header list
authorYun ilkook <ilkook.yun@samsung.com>
Mon, 4 Jul 2011 05:12:39 +0000 (14:12 +0900)
committerYun ilkook <ilkook.yun@samsung.com>
Mon, 4 Jul 2011 05:12:39 +0000 (14:12 +0900)
Change-Id: I2a64f296c2a09e20098d6a0652daabff8be8e43d

debian/changelog
src/lib/elm_store.c

index de81447..6ed157e 100644 (file)
@@ -1,3 +1,11 @@
+elementary (1.0.0+svn.58393slp2+build39) unstable; urgency=low
+
+  * [store] Fixed the miss poiter problem of the header list
+  * Git: 165.213.180.234:slp/pkgs/e/elementary
+  * Tag: elementary_1.0.0+svn.58393slp2+build39
+
+ -- Ilkook Yun <ilkook.yun@samsung.com>  Mon, 04 Jul 2011 14:10:26 +0900
+
 elementary (1.0.0+svn.58393slp2+build38) unstable; urgency=low
 
   * repackaging.
index 7d32f6b..eb12361 100644 (file)
@@ -1644,7 +1644,7 @@ _normal_item_append(Elm_Store_Item *sti, Elm_Genlist_Item_Class *itc)
                                                                       }
                                                                     else
                                                                       {
-                                                                         return;
+                                                                         break;
                                                                       }
                                                                  }
                                                                if (st->cb.item_free.func)
@@ -1653,53 +1653,59 @@ _normal_item_append(Elm_Store_Item *sti, Elm_Genlist_Item_Class *itc)
                                                                     remove_item->item_info = NULL;
                                                                  }
 
-                                                               Eina_List *temp_header_list = header_list;
-                                                               header_list = eina_list_remove(header_list, remove_item);
-                                                               st->total_item_count--;
-                                                               LKD(remove_item->lock);
-                                                               elm_genlist_item_del(remove_item->item);
-                                                               free(remove_item);
-
-                                                               if (eina_list_count(header_list) == 0)
+                                                               if (eina_list_count(header_list) == 1)
                                                                  {
-                                                                    st->header_items = eina_list_remove(st->header_items, temp_header_list);
+                                                                    st->header_items = eina_list_remove(st->header_items, header_list);
+                                                                    header_list = eina_list_free(header_list);
+                                                                    st->total_item_count--;
+                                                                    LKD(remove_item->lock);
+                                                                    elm_genlist_item_del(remove_item->item);
+                                                                    free(remove_item);
+                                                                    break;
                                                                  }
-                                                               else if(eina_list_count(header_list) == 1)
+                                                               else
                                                                  {
-                                                                    Elm_Store_Item *temp_sti = eina_list_nth(header_list, 0);
-                                                                    if(temp_sti && temp_sti->item_info)
+                                                                    header_list = eina_list_remove(header_list, remove_item);
+                                                                    st->total_item_count--;
+                                                                    LKD(remove_item->lock);
+                                                                    elm_genlist_item_del(remove_item->item);
+                                                                    free(remove_item);
+                                                                 }
+
+                                                               if(eina_list_count(header_list) == 1)
+                                                                 {
+                                                                    Elm_Store_Item *t_sti = eina_list_nth(header_list, 0);
+                                                                    if(t_sti && t_sti->item_info)
                                                                       {
-                                                                         if (temp_sti->item_info->item_type == ELM_GENLIST_ITEM_GROUP)
+                                                                         if (t_sti->item_info->item_type == ELM_GENLIST_ITEM_GROUP)
                                                                            {
-                                                                              if (temp_sti->fetched)
+                                                                              if (t_sti->fetched)
                                                                                 {
-                                                                                   int index = elm_store_item_index_get(temp_sti);
+                                                                                   int index = elm_store_item_index_get(t_sti);
                                                                                    if (index != -1)
                                                                                      {
                                                                                         _item_unfetch(st, index);
                                                                                      }
                                                                                    else
                                                                                      {
-                                                                                        return;
+                                                                                        break;
                                                                                      }
                                                                                 }
 
                                                                               if (st->cb.item_free.func)
                                                                                 {
-                                                                                   st->cb.item_free.func(st->cb.item_free.data, temp_sti->item_info);
-                                                                                   temp_sti->item_info = NULL;
+                                                                                   st->cb.item_free.func(st->cb.item_free.data, t_sti->item_info);
+                                                                                   t_sti->item_info = NULL;
                                                                                 }
-
-                                                                              header_list = eina_list_remove(header_list, temp_sti);
+                                                                              st->header_items = eina_list_remove(st->header_items, header_list);
+                                                                              header_list = eina_list_free(header_list);
                                                                               st->total_item_count--;
-                                                                              LKD(temp_sti->lock);
-                                                                              elm_genlist_item_del(temp_sti->item);
-                                                                              free(temp_sti);
-                                                                              st->header_items = eina_list_remove(st->header_items, temp_header_list);
+                                                                              LKD(t_sti->lock);
+                                                                              elm_genlist_item_del(t_sti->item);
+                                                                              free(t_sti);
                                                                            }
                                                                       }
                                                                  }
-                                                               temp_header_list = NULL;
                                                                removed = EINA_TRUE;
                                                             }
                                                        }
@@ -2446,27 +2452,35 @@ elm_store_item_del(Elm_Store_Item *sti)
                                                      remove_sti->item_info = NULL;
                                                   }
 
-                                                Eina_List *temp_header_list = header_list;
-                                                header_list = eina_list_remove(header_list, remove_sti);
-                                                st->total_item_count--;
-                                                LKD(remove_sti->lock);
-                                                elm_genlist_item_del(remove_sti->item);
-                                                free(remove_sti);
-
-                                                if (eina_list_count(header_list) == 0)
+                                                if (eina_list_count(header_list) == 1)
+                                                  {
+                                                     st->header_items = eina_list_remove(st->header_items, header_list);
+                                                     header_list = eina_list_free(header_list);
+                                                     st->total_item_count--;
+                                                     LKD(remove_sti->lock);
+                                                     elm_genlist_item_del(remove_sti->item);
+                                                     free(remove_sti);
+                                                     return;
+                                                  }
+                                                else
                                                   {
-                                                     st->header_items = eina_list_remove(st->header_items, temp_header_list);
+                                                     header_list = eina_list_remove(header_list, remove_sti);
+                                                     st->total_item_count--;
+                                                     LKD(remove_sti->lock);
+                                                     elm_genlist_item_del(remove_sti->item);
+                                                     free(remove_sti);
                                                   }
-                                                else if (eina_list_count(header_list) == 1)
+
+                                                if (eina_list_count(header_list) == 1)
                                                   {
-                                                     Elm_Store_Item *temp_sti = eina_list_nth(header_list, 0);
-                                                     if(temp_sti && temp_sti->item_info)
+                                                     Elm_Store_Item *t_sti = eina_list_nth(header_list, 0);
+                                                     if(t_sti && t_sti->item_info)
                                                        {
-                                                          if (temp_sti->item_info->item_type == ELM_GENLIST_ITEM_GROUP)
+                                                          if (t_sti->item_info->item_type == ELM_GENLIST_ITEM_GROUP)
                                                             {
-                                                               if (temp_sti->fetched)
+                                                               if (t_sti->fetched)
                                                                  {
-                                                                    int index = elm_store_item_index_get(temp_sti);
+                                                                    int index = elm_store_item_index_get(t_sti);
                                                                     if (index != -1)
                                                                       {
                                                                          _item_unfetch(st, index);
@@ -2478,20 +2492,18 @@ elm_store_item_del(Elm_Store_Item *sti)
                                                                  }
                                                                if (st->cb.item_free.func)
                                                                  {
-                                                                    st->cb.item_free.func(st->cb.item_free.data, temp_sti->item_info);
-                                                                    temp_sti->item_info = NULL;
+                                                                    st->cb.item_free.func(st->cb.item_free.data, t_sti->item_info);
+                                                                    t_sti->item_info = NULL;
                                                                  }
-
-                                                               header_list = eina_list_remove(header_list, temp_sti);
+                                                               st->header_items = eina_list_remove(st->header_items, header_list);
+                                                               header_list = eina_list_free(header_list);
                                                                st->total_item_count--;
-                                                               LKD(temp_sti->lock);
-                                                               elm_genlist_item_del(temp_sti->item);
-                                                               free(temp_sti);
-                                                               st->header_items = eina_list_remove(st->header_items, temp_header_list);
+                                                               LKD(t_sti->lock);
+                                                               elm_genlist_item_del(t_sti->item);
+                                                               free(t_sti);
                                                             }
                                                        }
                                                   }
-                                                temp_header_list = NULL;
                                                 removed = EINA_TRUE;
                                              }
                                         }