genlist no longer crashes if a selected item is deleted during deselect_all

This commit is contained in:
zmike 2014-03-23 10:37:47 -04:00
parent 7f0f50fbc6
commit ea088ab21f
2 changed files with 14 additions and 7 deletions

View File

@ -2377,14 +2377,16 @@ _item_multi_select_down(Elm_Genlist_Smart_Data *sd)
static Eina_Bool
_all_items_deselect(Elm_Genlist_Smart_Data *sd)
{
Eina_List *l;
Elm_Object_Item *it;
if (!sd->selected) return EINA_FALSE;
l = eina_list_clone(sd->selected);
EINA_LIST_FREE(l, it)
elm_genlist_item_selected_set(it, EINA_FALSE);
sd->deselecting = eina_list_clone(sd->selected);
while (sd->deselecting)
{
Elm_Object_Item *it = eina_list_data_get(sd->deselecting);
sd->deselecting = eina_list_remove_list(sd->deselecting, sd->deselecting);
elm_genlist_item_selected_set(it, EINA_FALSE);
}
return EINA_TRUE;
}
@ -3286,7 +3288,11 @@ _elm_genlist_item_del_not_serious(Elm_Gen_Item *it)
if (it->walking > 0) return;
if (it->selected)
sd->selected = eina_list_remove(sd->selected, it);
{
sd->selected = eina_list_remove(sd->selected, it);
if (sd->deselecting)
sd->deselecting = eina_list_remove(sd->deselecting, it);
}
if (sd->last_focused_item == (Elm_Object_Item *)it)
sd->last_focused_item = NULL;
if (sd->focused_item == (Elm_Object_Item *)it)

View File

@ -38,6 +38,7 @@ struct _Elm_Genlist_Smart_Data
Eina_List *selected; /* a list of
* selected
* items */
Eina_List *deselecting; /* a list of items currently being deselected */
Eina_List *group_items; /* a list of
* groups index
* items */