list - fix item disable and infinite loop on next select

This commit is contained in:
Carsten Haitzler 2013-11-16 17:50:11 +09:00
parent caaf444d9b
commit 4f4982663c
1 changed files with 15 additions and 7 deletions

View File

@ -1025,8 +1025,9 @@ _item_unhighlight(Elm_List_Item *it)
obj = WIDGET(it); obj = WIDGET(it);
ELM_LIST_DATA_GET(obj, sd); ELM_LIST_DATA_GET(obj, sd);
if ((!it->highlighted) || (it->base.disabled) || // if ((!it->highlighted) || (it->base.disabled) ||
(sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE)) return; // (sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE)) return;
if (!it->highlighted) return;
evas_object_ref(obj); evas_object_ref(obj);
_elm_list_walk(sd); _elm_list_walk(sd);
@ -1055,8 +1056,8 @@ _item_unselect(Elm_List_Item *it)
obj = WIDGET(it); obj = WIDGET(it);
ELM_LIST_DATA_GET(obj, sd); ELM_LIST_DATA_GET(obj, sd);
if (it->base.disabled || (sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE)) // if (it->base.disabled || (sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE))
return; // return;
evas_object_ref(obj); evas_object_ref(obj);
_elm_list_walk(sd); _elm_list_walk(sd);
@ -1071,7 +1072,9 @@ _item_unselect(Elm_List_Item *it)
{ {
it->selected = EINA_FALSE; it->selected = EINA_FALSE;
sd->selected = eina_list_remove(sd->selected, it); sd->selected = eina_list_remove(sd->selected, it);
evas_object_smart_callback_call(WIDGET(it), SIG_UNSELECTED, it); if (!(it->base.disabled ||
(sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE)))
evas_object_smart_callback_call(WIDGET(it), SIG_UNSELECTED, it);
} }
_elm_list_unwalk(obj, sd); _elm_list_unwalk(obj, sd);
@ -1316,8 +1319,11 @@ _mouse_up_cb(void *data,
{ {
while (sd->selected) while (sd->selected)
{ {
_item_unhighlight(sd->selected->data); Elm_List_Item *it2 = sd->selected->data;
_item_unselect(sd->selected->data); sd->selected = eina_list_remove_list
(sd->selected, sd->selected);
_item_unhighlight(it2);
_item_unselect(it2);
} }
_item_highlight(it); _item_highlight(it);
_item_select(it); _item_select(it);
@ -1347,6 +1353,8 @@ _item_disable_hook(Elm_Object_Item *it)
{ {
Elm_List_Item *item = (Elm_List_Item *)it; Elm_List_Item *item = (Elm_List_Item *)it;
_item_unhighlight(item);
_item_unselect(item);
if (item->base.disabled) if (item->base.disabled)
edje_object_signal_emit(VIEW(item), "elm,state,disabled", "elm"); edje_object_signal_emit(VIEW(item), "elm,state,disabled", "elm");
else else