forked from enlightenment/efl
genlist no longer crashes if a selected item is deleted during deselect_all
This commit is contained in:
parent
7f0f50fbc6
commit
ea088ab21f
|
@ -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)
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue