list: Fixed item multi/single selection routine to skip disabled item correctly.

@fix
This commit is contained in:
Daniel Juyung Seo 2014-03-24 00:46:43 +09:00
parent 813016d0e6
commit e5f9c254bd
1 changed files with 26 additions and 14 deletions

View File

@ -95,6 +95,11 @@ _item_multi_select_up(Elm_List_Smart_Data *sd)
if (!sd->multi) return EINA_FALSE;
prev = elm_list_item_prev(sd->last_selected_item);
while (prev)
{
if (!elm_object_item_disabled_get(prev)) break;
prev = elm_list_item_prev(prev);
}
if (!prev) return EINA_TRUE;
if (elm_list_item_selected_get(prev))
@ -118,6 +123,11 @@ _item_multi_select_down(Elm_List_Smart_Data *sd)
if (!sd->multi) return EINA_FALSE;
next = elm_list_item_next(sd->last_selected_item);
while (next)
{
if (!elm_object_item_disabled_get(next)) break;
next = elm_list_item_next(next);
}
if (!next) return EINA_TRUE;
if (elm_list_item_selected_get(next))
@ -149,16 +159,17 @@ _item_single_select_up(Elm_List_Smart_Data *sd)
{
Elm_Object_Item *prev;
if (!sd->selected) prev = eina_list_data_get(eina_list_last(sd->items));
if (!sd->selected)
prev = eina_list_data_get(eina_list_last(sd->items));
else
prev = elm_list_item_prev(sd->last_selected_item);
while (prev)
{
prev = elm_list_item_prev(sd->last_selected_item);
while (prev)
{
if (!elm_object_item_disabled_get(prev)) break;
prev = elm_list_item_prev(prev);
}
if (!elm_object_item_disabled_get(prev)) break;
prev = elm_list_item_prev(prev);
}
if (!prev) return EINA_FALSE;
_all_items_unselect(sd);
@ -173,16 +184,17 @@ _item_single_select_down(Elm_List_Smart_Data *sd)
{
Elm_Object_Item *next;
if (!sd->selected) next = eina_list_data_get(sd->items);
if (!sd->selected)
next = eina_list_data_get(sd->items);
else
next = elm_list_item_next(sd->last_selected_item);
while (next)
{
next = elm_list_item_next(sd->last_selected_item);
while (next)
{
if (!elm_object_item_disabled_get(next)) break;
next = elm_list_item_next(next);
}
if (!elm_object_item_disabled_get(next)) break;
next = elm_list_item_next(next);
}
if (!next) return EINA_FALSE;
_all_items_unselect(sd);