fix 2 flipselector issues.

1. on shutdown it calls lots of selected callbacks as it delets items
- wrong.
2. segv waiting to hapen due to list management (brian wang report).



SVN revision: 74956
This commit is contained in:
Carsten Haitzler 2012-08-07 03:59:02 +00:00
parent 77cb1f4183
commit b3b9246eda
2 changed files with 8 additions and 3 deletions

View File

@ -249,7 +249,8 @@ _on_item_changed(Elm_Flipselector_Smart_Data *sd)
item = DATA_GET(sd->current);
if (!item) return;
if (sd->deleting) return;
if (item->func)
item->func((void *)item->base.data, WIDGET(item), item);
if (!item->deleted)
@ -293,8 +294,6 @@ _item_del_pre_hook(Elm_Object_Item *it)
{
if (item2 == item)
{
sd->items = eina_list_remove_list(sd->items, l);
if (sd->current == l)
{
sd->current = l->prev;
@ -306,6 +305,7 @@ _item_del_pre_hook(Elm_Object_Item *it)
}
else _send_msg(sd, MSG_FLIP_DOWN, "");
}
sd->items = eina_list_remove_list(sd->items, l);
break;
}
}
@ -380,6 +380,7 @@ _flip_up(Elm_Flipselector_Smart_Data *sd)
if (!sd->current) return;
if (sd->deleting) return;
if (sd->current == sd->items)
{
sd->current = eina_list_last(sd->items);
@ -402,6 +403,7 @@ _flip_down(Elm_Flipselector_Smart_Data *sd)
if (!sd->current) return;
if (sd->deleting) return;
sd->current = eina_list_next(sd->current);
if (!sd->current)
{
@ -567,6 +569,8 @@ _elm_flipselector_smart_del(Evas_Object *obj)
{
ELM_FLIPSELECTOR_DATA_GET(obj, sd);
sd->deleting = EINA_TRUE;
if (sd->walking) ERR("flipselector deleted while walking.\n");
while (sd->items)

View File

@ -134,6 +134,7 @@ struct _Elm_Flipselector_Smart_Data
int walking;
Eina_Bool evaluating : 1;
Eina_Bool deleting : 1;
};
typedef struct _Elm_Flipselector_Item Elm_Flipselector_Item;