{
if(sti)
{
- if (sti->fetch_th)
+ if (st->fetch_thread && sti->fetch_th)
{
ecore_thread_cancel(sti->fetch_th);
sti->fetch_th = NULL;
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)
{
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;
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;
+ }
}
}
}
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;
- }
}
}
}
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;
- }
+ }
}
}
}
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);
+ }
}
}
-
}
}
}
{
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)
{
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)
{
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++;
+ }
}
}
}
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;
}
}
}