Merge "els_icon/elm_image - added features to aspect_ratio changeable"
authorChunEon Park <chuneon.park@samsung.com>
Mon, 27 Jun 2011 11:03:48 +0000 (20:03 +0900)
committerGerrit Code Review <git@Maetan>
Mon, 27 Jun 2011 11:03:48 +0000 (20:03 +0900)
debian/changelog
src/lib/elm_conform.c
src/lib/elm_store.c

index 29d432c..12da544 100644 (file)
@@ -1,3 +1,11 @@
+elementary (1.0.0+svn.58393slp2+build32) unstable; urgency=low
+
+  * [store] Fixed the store item check
+  * Git: 165.213.180.234:slp/pkgs/e/elementary
+  * Tag: elementary_1.0.0+svn.58393slp2+build32
+
+ -- Ilkook Yun <ilkook.yun@samsung.com>  Mon, 27 Jun 2011 17:03:28 +0900
+
 elementary (1.0.0+svn.58393slp2+build31) unstable; urgency=low
 
   * [store] Fixed the unnecessary code
index 67347dd..2342e16 100644 (file)
@@ -433,6 +433,7 @@ elm_conformant_add(Evas_Object *parent)
    elm_widget_type_set(obj, "conformant");
    elm_widget_sub_object_add(parent, obj);
    elm_widget_data_set(obj, wd);
+   elm_widget_del_pre_hook_set(obj, _del_pre_hook);
    elm_widget_del_hook_set(obj, _del_hook);
    elm_widget_theme_hook_set(obj, _theme_hook);
    elm_widget_can_focus_set(obj, EINA_FALSE);
index caa7aa8..a77f878 100644 (file)
@@ -666,7 +666,7 @@ elm_store_free(Elm_Store *st)
                     {
                        if(sti)
                          {
-                            if (sti->fetch_th)
+                            if (st->fetch_thread && sti->fetch_th)
                               {
                                  ecore_thread_cancel(sti->fetch_th);
                                  sti->fetch_th = NULL;
@@ -674,6 +674,7 @@ elm_store_free(Elm_Store *st)
                             if (st->cb.item_free.func)
                               {
                                  st->cb.item_free.func(st->cb.item_free.data, sti->item_info);
+                                 sti->item_info = NULL;
                               }
                             if (sti->fetched)
                               {
@@ -1077,6 +1078,11 @@ _item_mapping_find(Elm_Store_Item *sti, const char *part)
    if (!EINA_MAGIC_CHECK(sti, ELM_STORE_ITEM_MAGIC)) return NULL;
    const Elm_Store_Item_Mapping *m;
 
+   if(!sti->item_info)
+     {
+        return NULL;
+     }
+
    for (m = sti->item_info->mapping; m; m++)
      {
         if (m->type == ELM_STORE_ITEM_MAPPING_NONE) break;
@@ -1459,10 +1465,13 @@ _group_item_append(Elm_Store_Item *sti, Elm_Genlist_Item_Class *itc)
                   if(header_list)
                     {
                        Elm_Store_Item *item = eina_list_nth(header_list, 0);
-                       if (item->item_info->group_index == sti->item_info->group_index)
+                       if(item && item->item_info)
                          {
-                            header_add = EINA_FALSE;
-                            break;
+                            if (item->item_info->group_index == sti->item_info->group_index)
+                              {
+                                 header_add = EINA_FALSE;
+                                 break;
+                              }
                          }
                     }
                }
@@ -1483,32 +1492,35 @@ _group_item_append(Elm_Store_Item *sti, Elm_Genlist_Item_Class *itc)
                        if (header_list)
                          {
                             Elm_Store_Item *group_sti = eina_list_nth(header_list, 0);
-                            if(group_sti->item_info->item_type == ELM_GENLIST_ITEM_GROUP)
+                            if(group_sti && group_sti->item_info)
                               {
-                                 int sort;
-                                 if (st->cb.item_sort.func)
+                                 if(group_sti->item_info->item_type == ELM_GENLIST_ITEM_GROUP)
                                    {
-                                      sort = st->cb.item_sort.func(st->cb.item_sort.data, sti->item_info, group_sti->item_info);
+                                      int sort;
+                                      if (st->cb.item_sort.func)
+                                        {
+                                           sort = st->cb.item_sort.func(st->cb.item_sort.data, sti->item_info, group_sti->item_info);
 
-                                      if(sort == ELM_STORE_ITEM_SORT_LOW)
+                                           if(sort == ELM_STORE_ITEM_SORT_LOW)
+                                             {
+                                                st->header_items = eina_list_prepend_relative(st->header_items, new_header_list, header_list);
+                                                sti->item = elm_genlist_item_insert_before(st->genlist,
+                                                                                           itc,
+                                                                                           sti,
+                                                                                           NULL,
+                                                                                           group_sti->item,
+                                                                                           ELM_GENLIST_ITEM_GROUP,
+                                                                                           NULL,
+                                                                                           NULL);
+                                                last_header = EINA_FALSE;
+                                                break;
+                                             }
+                                        }
+                                      else
                                         {
-                                           st->header_items = eina_list_prepend_relative(st->header_items, new_header_list, header_list);
-                                           sti->item = elm_genlist_item_insert_before(st->genlist,
-                                                                                      itc,
-                                                                                      sti,
-                                                                                      NULL,
-                                                                                      group_sti->item,
-                                                                                      ELM_GENLIST_ITEM_GROUP,
-                                                                                      NULL,
-                                                                                      NULL);
-                                           last_header = EINA_FALSE;
                                            break;
                                         }
                                    }
-                                 else
-                                   {
-                                      break;
-                                   }
                               }
                          }
                     }
@@ -1566,31 +1578,34 @@ _normal_item_append(Elm_Store_Item *sti, Elm_Genlist_Item_Class *itc)
                        if(header_list)
                          {
                             Elm_Store_Item *header_item = eina_list_nth(header_list, 0);
-                            if (header_item->item_info->group_index == sti->item_info->group_index)
+                            if(header_item && header_item->item_info)
                               {
-                                 Eina_List *in_l;
-                                 Eina_List *in_l_next;
-                                 Elm_Store_Item *item;
-
-                                 EINA_LIST_FOREACH_SAFE(header_list, in_l, in_l_next, item)
+                                 if (header_item->item_info->group_index == sti->item_info->group_index)
                                    {
-                                      if(item)
+                                      Eina_List *in_l;
+                                      Eina_List *in_l_next;
+                                      Elm_Store_Item *item;
+
+                                      EINA_LIST_FOREACH_SAFE(header_list, in_l, in_l_next, item)
                                         {
-                                           int sort;
-                                           if (st->cb.item_sort.func)
+                                           if(item)
                                              {
-                                                sort = st->cb.item_sort.func(st->cb.item_sort.data, sti->item_info, item->item_info);
+                                                int sort;
+                                                if (st->cb.item_sort.func)
+                                                  {
+                                                     sort = st->cb.item_sort.func(st->cb.item_sort.data, sti->item_info, item->item_info);
 
-                                                if(sort == ELM_STORE_ITEM_SORT_SAME)
+                                                     if(sort == ELM_STORE_ITEM_SORT_SAME)
+                                                       {
+                                                          elm_store_item_update(item);
+                                                       }
+                                                  }
+                                                else
                                                   {
-                                                     elm_store_item_update(item);
+                                                     break;
                                                   }
-                                             }
-                                           else
-                                             {
-                                                break;
-                                             }
 
+                                             }
                                         }
                                    }
                               }
@@ -1608,177 +1623,184 @@ _normal_item_append(Elm_Store_Item *sti, Elm_Genlist_Item_Class *itc)
                        if(header_list)
                          {
                             Elm_Store_Item *header_item = eina_list_nth(header_list, 0);
-                            if (header_item->item_info->group_index == sti->item_info->pre_group_index)
+                            if(header_item && header_item->item_info)
                               {
-                                 Eina_Bool removed = EINA_FALSE;
-                                 Eina_List *in_l;
-                                 Eina_List *in_l_next;
-                                 Elm_Store_Item *remove_item;
-
-                                 EINA_LIST_FOREACH_SAFE(header_list, in_l, in_l_next, remove_item)
+                                 if (header_item->item_info->group_index == sti->item_info->pre_group_index)
                                    {
-                                      if(remove_item)
+                                      Eina_Bool removed = EINA_FALSE;
+                                      Eina_List *in_l;
+                                      Eina_List *in_l_next;
+                                      Elm_Store_Item *remove_item;
+
+                                      EINA_LIST_FOREACH_SAFE(header_list, in_l, in_l_next, remove_item)
                                         {
-                                           if (removed == EINA_TRUE)
+                                           if(remove_item)
                                              {
-                                                remove_item->item_info->index--;
-                                             }
-                                           else
-                                             {
-                                                int sort;
-                                                if (st->cb.item_sort.func)
+                                                if (removed == EINA_TRUE)
                                                   {
-                                                     sort = st->cb.item_sort.func(st->cb.item_sort.data, sti->item_info, remove_item->item_info);
-
-                                                     if(sort == ELM_STORE_ITEM_SORT_SAME)
+                                                     remove_item->item_info->index--;
+                                                  }
+                                                else
+                                                  {
+                                                     int sort;
+                                                     if (st->cb.item_sort.func)
                                                        {
-                                                          if (st->cb.item_free.func)
-                                                            {
-                                                               st->cb.item_free.func(st->cb.item_free.data, remove_item->item_info);
-                                                            }
-                                                          if (remove_item->fetched)
+                                                          sort = st->cb.item_sort.func(st->cb.item_sort.data, sti->item_info, remove_item->item_info);
+
+                                                          if(sort == ELM_STORE_ITEM_SORT_SAME)
                                                             {
-                                                               int index = elm_store_item_index_get(remove_item);
-                                                               if (index != -1)
+                                                               if (st->cb.item_free.func)
                                                                  {
-                                                                    _item_unfetch(st, index);
+                                                                    st->cb.item_free.func(st->cb.item_free.data, remove_item->item_info);
+                                                                    remove_item->item_info = NULL;
                                                                  }
-                                                               else
+                                                               if (remove_item->fetched)
                                                                  {
-                                                                    return;
+                                                                    int index = elm_store_item_index_get(remove_item);
+                                                                    if (index != -1)
+                                                                      {
+                                                                         _item_unfetch(st, index);
+                                                                      }
+                                                                    else
+                                                                      {
+                                                                         return;
+                                                                      }
                                                                  }
-                                                            }
-                                                          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);
+                                                               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)
-                                                            {
-                                                               st->header_items = eina_list_remove(st->header_items, header_list);
-                                                               header_list = eina_list_free(header_list);
-                                                            }
-                                                          else if(eina_list_count(header_list) == 1)
-                                                            {
-                                                               Elm_Store_Item *temp_sti = eina_list_nth(header_list, 0);
-                                                               if (temp_sti->item_info->item_type == ELM_GENLIST_ITEM_GROUP)
+                                                               if (eina_list_count(header_list) == 0)
                                                                  {
-                                                                    if (st->cb.item_free.func)
-                                                                      {
-                                                                         st->cb.item_free.func(st->cb.item_free.data, temp_sti->item_info);
-                                                                      }
-                                                                    if (temp_sti->fetched)
+                                                                    st->header_items = eina_list_remove(st->header_items, header_list);
+                                                                    header_list = eina_list_free(header_list);
+                                                                 }
+                                                               else 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)
                                                                       {
-                                                                         int index = elm_store_item_index_get(temp_sti);
-                                                                         if (index != -1)
-                                                                           {
-                                                                              _item_unfetch(st, index);
-                                                                           }
-                                                                         else
+                                                                         if (temp_sti->item_info->item_type == ELM_GENLIST_ITEM_GROUP)
                                                                            {
-                                                                              return;
+                                                                              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;
+                                                                                }
+                                                                              if (temp_sti->fetched)
+                                                                                {
+                                                                                   int index = elm_store_item_index_get(temp_sti);
+                                                                                   if (index != -1)
+                                                                                     {
+                                                                                        _item_unfetch(st, index);
+                                                                                     }
+                                                                                   else
+                                                                                     {
+                                                                                        return;
+                                                                                     }
+                                                                                }
+                                                                              header_list = eina_list_remove(header_list, temp_sti);
+                                                                              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, header_list);
+                                                                              header_list = eina_list_free(header_list);
                                                                            }
                                                                       }
-                                                                    header_list = eina_list_remove(header_list, temp_sti);
-                                                                    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, header_list);
-                                                                    header_list = eina_list_free(header_list);
                                                                  }
+                                                               removed = EINA_TRUE;
                                                             }
-                                                          removed = EINA_TRUE;
                                                        }
-                                                  }
-                                                else
-                                                  {
-                                                     break;
+                                                     else
+                                                       {
+                                                          break;
+                                                       }
                                                   }
                                              }
                                         }
                                    }
-                              }
-                            else if (header_item->item_info->group_index == sti->item_info->group_index)
-                              {
-                                 Eina_Bool last_add = EINA_TRUE;
-                                 Eina_List *in_l;
-                                 Eina_List *in_l_next;
-                                 Elm_Store_Item *comp_item;
-
-                                 EINA_LIST_FOREACH_SAFE(header_list, in_l, in_l_next, comp_item)
+                                 else if (header_item->item_info->group_index == sti->item_info->group_index)
                                    {
-                                      if(comp_item)
+                                      Eina_Bool last_add = EINA_TRUE;
+                                      Eina_List *in_l;
+                                      Eina_List *in_l_next;
+                                      Elm_Store_Item *comp_item;
+
+                                      EINA_LIST_FOREACH_SAFE(header_list, in_l, in_l_next, comp_item)
                                         {
-                                           if(last_add == EINA_FALSE)
-                                             {
-                                                comp_item->item_info->index++;
-                                             }
-                                           else
+                                           if(comp_item)
                                              {
-                                                int sort;
-                                                if (st->cb.item_sort.func)
+                                                if(last_add == EINA_FALSE)
                                                   {
-                                                     sort = st->cb.item_sort.func(st->cb.item_sort.data, sti->item_info, comp_item->item_info);
+                                                     comp_item->item_info->index++;
+                                                  }
+                                                else
+                                                  {
+                                                     int sort;
+                                                     if (st->cb.item_sort.func)
+                                                       {
+                                                          sort = st->cb.item_sort.func(st->cb.item_sort.data, sti->item_info, comp_item->item_info);
 
-                                                     if(sort == ELM_STORE_ITEM_SORT_LOW)
+                                                          if(sort == ELM_STORE_ITEM_SORT_LOW)
+                                                            {
+                                                               sti->item_info->index = comp_item->item_info->index;
+                                                               comp_item->item_info->index++;
+                                                               header_list = eina_list_prepend_relative(header_list, sti, comp_item);
+                                                               st->total_item_count++;
+                                                               sti->item = elm_genlist_item_insert_before(st->genlist,
+                                                                                                          itc,
+                                                                                                          sti,
+                                                                                                          header_item->item,
+                                                                                                          comp_item->item,
+                                                                                                          ELM_GENLIST_ITEM_NONE,
+                                                                                                          (Evas_Smart_Cb)sti->store->cb.item_select.func,
+                                                                                                          (void *)sti->store->cb.item_select.data);
+                                                               elm_store_item_update(sti);
+                                                               last_add = EINA_FALSE;
+                                                            }
+                                                       }
+                                                     else
                                                        {
-                                                          sti->item_info->index = comp_item->item_info->index;
-                                                          comp_item->item_info->index++;
-                                                          header_list = eina_list_prepend_relative(header_list, sti, comp_item);
+                                                          Elm_Store_Item *last_sti = eina_list_nth(header_list, eina_list_count(header_list) - 1);
+                                                          sti->item_info->index = eina_list_count(header_list);
+                                                          header_list = eina_list_append(header_list, sti);
                                                           st->total_item_count++;
-                                                          sti->item = elm_genlist_item_insert_before(st->genlist,
-                                                                                                     itc,
-                                                                                                     sti,
-                                                                                                     header_item->item,
-                                                                                                     comp_item->item,
-                                                                                                     ELM_GENLIST_ITEM_NONE,
-                                                                                                     (Evas_Smart_Cb)sti->store->cb.item_select.func,
-                                                                                                     (void *)sti->store->cb.item_select.data);
+                                                          sti->item = elm_genlist_item_insert_after(st->genlist,
+                                                                                                    itc,
+                                                                                                    sti,
+                                                                                                    header_item->item,
+                                                                                                    last_sti->item,
+                                                                                                    ELM_GENLIST_ITEM_NONE,
+                                                                                                    (Evas_Smart_Cb)sti->store->cb.item_select.func,
+                                                                                                    (void *)sti->store->cb.item_select.data);
                                                           elm_store_item_update(sti);
                                                           last_add = EINA_FALSE;
+                                                          break;
                                                        }
                                                   }
-                                                else
-                                                  {
-                                                     Elm_Store_Item *last_sti = eina_list_nth(header_list, eina_list_count(header_list) - 1);
-                                                     sti->item_info->index = eina_list_count(header_list);
-                                                     header_list = eina_list_append(header_list, sti);
-                                                     st->total_item_count++;
-                                                     sti->item = elm_genlist_item_insert_after(st->genlist,
-                                                                                               itc,
-                                                                                               sti,
-                                                                                               header_item->item,
-                                                                                               last_sti->item,
-                                                                                               ELM_GENLIST_ITEM_NONE,
-                                                                                               (Evas_Smart_Cb)sti->store->cb.item_select.func,
-                                                                                               (void *)sti->store->cb.item_select.data);
-                                                     elm_store_item_update(sti);
-                                                     last_add = EINA_FALSE;
-                                                     break;
-                                                  }
                                              }
                                         }
-                                   }
-                                 if(last_add)
-                                   {
-                                      Elm_Store_Item *last_sti = eina_list_nth(header_list, eina_list_count(header_list) - 1);
-                                      sti->item_info->index = eina_list_count(header_list);
-                                      header_list = eina_list_append(header_list, sti);
-                                      st->total_item_count++;
-                                      sti->item = elm_genlist_item_insert_after(st->genlist,
-                                                                                itc,
-                                                                                sti,
-                                                                                header_item->item,
-                                                                                last_sti->item,
-                                                                                ELM_GENLIST_ITEM_NONE,
-                                                                                (Evas_Smart_Cb)sti->store->cb.item_select.func,
-                                                                                (void *)sti->store->cb.item_select.data);
-                                      elm_store_item_update(sti);
+                                      if(last_add)
+                                        {
+                                           Elm_Store_Item *last_sti = eina_list_nth(header_list, eina_list_count(header_list) - 1);
+                                           sti->item_info->index = eina_list_count(header_list);
+                                           header_list = eina_list_append(header_list, sti);
+                                           st->total_item_count++;
+                                           sti->item = elm_genlist_item_insert_after(st->genlist,
+                                                                                     itc,
+                                                                                     sti,
+                                                                                     header_item->item,
+                                                                                     last_sti->item,
+                                                                                     ELM_GENLIST_ITEM_NONE,
+                                                                                     (Evas_Smart_Cb)sti->store->cb.item_select.func,
+                                                                                     (void *)sti->store->cb.item_select.data);
+                                           elm_store_item_update(sti);
+                                        }
                                    }
                               }
-
                          }
                     }
                }
@@ -1798,7 +1820,7 @@ _normal_item_append(Elm_Store_Item *sti, Elm_Genlist_Item_Class *itc)
                          {
                             Elm_Store_Item *header_item = eina_list_nth(header_list, 0);
 
-                            if(header_item)
+                            if(header_item && header_item->item_info)
                               {
                                  if (header_item->item_info->group_index == sti->item_info->group_index)
                                    {
@@ -2071,7 +2093,7 @@ elm_store_item_index_get(const Elm_Store_Item *sti)
              if (header_list)
                {
                   Elm_Store_Item *temp_sti = eina_list_nth(header_list, 0);
-                  if(temp_sti)
+                  if(temp_sti && temp_sti->item_info && sti->item_info)
                     {
                        if (sti->item_info->group_index == temp_sti->item_info->group_index)
                          {
@@ -2139,29 +2161,32 @@ elm_store_item_data_index_get(const Elm_Store_Item *sti)
                   if (header_list)
                     {
                        Elm_Store_Item *temp_sti = eina_list_nth(header_list, 0);
-
-                       if(temp_sti->item_info->item_type == ELM_GENLIST_ITEM_GROUP)
+                       if(temp_sti && temp_sti->item_info && sti->item_info)
                          {
-                            group_item_count++;
-                         }
 
-                       if (temp_sti->item_info->group_index == sti->item_info->group_index)
-                         {
-                            Eina_List *in_l;
-                            Eina_List *in_l_next;
-                            Elm_Store_Item *comp_item;
+                            if(temp_sti->item_info->item_type == ELM_GENLIST_ITEM_GROUP)
+                              {
+                                 group_item_count++;
+                              }
 
-                            EINA_LIST_FOREACH_SAFE(header_list, in_l, in_l_next, comp_item)
+                            if (temp_sti->item_info->group_index == sti->item_info->group_index)
                               {
-                                 if(comp_item)
+                                 Eina_List *in_l;
+                                 Eina_List *in_l_next;
+                                 Elm_Store_Item *comp_item;
+
+                                 EINA_LIST_FOREACH_SAFE(header_list, in_l, in_l_next, comp_item)
                                    {
-                                      if (comp_item->item_info->index == sti->item_info->index)
-                                        {
-                                           return (index - group_item_count);
-                                        }
-                                      else
+                                      if(comp_item)
                                         {
-                                           index++;
+                                           if (comp_item->item_info->index == sti->item_info->index)
+                                             {
+                                                return (index - group_item_count);
+                                             }
+                                           else
+                                             {
+                                                index++;
+                                             }
                                         }
                                    }
                               }
@@ -2393,83 +2418,91 @@ elm_store_item_del(Elm_Store_Item *sti)
              if (header_list)
                {
                   Elm_Store_Item *header_item = eina_list_nth(header_list, 0);
-
-                  if (header_item->item_info->group_index == sti->item_info->group_index)
+                  if(header_item && header_item->item_info && sti->item_info)
                     {
-                       Eina_Bool removed = EINA_FALSE;
-                       Eina_List *in_l;
-                       Eina_List *in_l_next;
-                       Elm_Store_Item *remove_sti;
-                       EINA_LIST_FOREACH_SAFE(header_list, in_l, in_l_next, remove_sti)
+
+                       if (header_item->item_info->group_index == sti->item_info->group_index)
                          {
-                            if(remove_sti)
+                            Eina_Bool removed = EINA_FALSE;
+                            Eina_List *in_l;
+                            Eina_List *in_l_next;
+                            Elm_Store_Item *remove_sti;
+                            EINA_LIST_FOREACH_SAFE(header_list, in_l, in_l_next, remove_sti)
                               {
-                                 if (removed == EINA_TRUE)
-                                   {
-                                      remove_sti->item_info->index--;
-                                   }
-                                 else
+                                 if(remove_sti)
                                    {
-                                      if (remove_sti->item_info->index == sti->item_info->index)
+                                      if (removed == EINA_TRUE)
                                         {
-                                           if (st->cb.item_free.func)
-                                             {
-                                                st->cb.item_free.func(st->cb.item_free.data, remove_sti->item_info);
-                                             }
-                                           if (remove_sti->fetched)
+                                           remove_sti->item_info->index--;
+                                        }
+                                      else
+                                        {
+                                           if (remove_sti->item_info->index == sti->item_info->index)
                                              {
-                                                int index = elm_store_item_index_get(remove_sti);
-                                                if (index != -1)
+                                                if (st->cb.item_free.func)
                                                   {
-                                                     _item_unfetch(st, index);
+                                                     st->cb.item_free.func(st->cb.item_free.data, remove_sti->item_info);
+                                                     remove_sti->item_info = NULL;
                                                   }
-                                                else
+                                                if (remove_sti->fetched)
                                                   {
-                                                     return;
+                                                     int index = elm_store_item_index_get(remove_sti);
+                                                     if (index != -1)
+                                                       {
+                                                          _item_unfetch(st, index);
+                                                       }
+                                                     else
+                                                       {
+                                                          return;
+                                                       }
                                                   }
-                                             }
-                                           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);
+                                                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)
-                                             {
-                                                st->header_items = eina_list_remove(st->header_items, header_list);
-                                                header_list = eina_list_free(header_list);
-                                             }
-                                           else if (eina_list_count(header_list) == 1)
-                                             {
-                                                Elm_Store_Item *temp_sti = eina_list_nth(header_list, 0);
-                                                if (temp_sti->item_info->item_type == ELM_GENLIST_ITEM_GROUP)
+                                                if (eina_list_count(header_list) == 0)
                                                   {
-                                                     if (st->cb.item_free.func)
-                                                       {
-                                                          st->cb.item_free.func(st->cb.item_free.data, temp_sti->item_info);
-                                                       }
-                                                     if (temp_sti->fetched)
+                                                     st->header_items = eina_list_remove(st->header_items, header_list);
+                                                     header_list = eina_list_free(header_list);
+                                                  }
+                                                else 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)
                                                        {
-                                                          int index = elm_store_item_index_get(temp_sti);
-                                                          if (index != -1)
+                                                          if (temp_sti->item_info->item_type == ELM_GENLIST_ITEM_GROUP)
                                                             {
-                                                               _item_unfetch(st, index);
-                                                            }
-                                                          else
-                                                            {
-                                                               return;
+                                                               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;
+                                                                 }
+                                                               if (temp_sti->fetched)
+                                                                 {
+                                                                    int index = elm_store_item_index_get(temp_sti);
+                                                                    if (index != -1)
+                                                                      {
+                                                                         _item_unfetch(st, index);
+                                                                      }
+                                                                    else
+                                                                      {
+                                                                         return;
+                                                                      }
+                                                                 }
+                                                               header_list = eina_list_remove(header_list, temp_sti);
+                                                               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, header_list);
+                                                               header_list = eina_list_free(header_list);
                                                             }
                                                        }
-                                                     header_list = eina_list_remove(header_list, temp_sti);
-                                                     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, header_list);
-                                                     header_list = eina_list_free(header_list);
                                                   }
+                                                removed = EINA_TRUE;
                                              }
-                                           removed = EINA_TRUE;
                                         }
                                    }
                               }