if (dir == 1)
while ((tmp) && (tmp->generation < sd->generation))
{
- if (!elm_object_item_disabled_get((Elm_Object_Item *)tmp))
+ if (!elm_object_item_disabled_get((Elm_Object_Item *)tmp) &&
+ ((tmp->select_mode == ELM_OBJECT_SELECT_MODE_DEFAULT) ||
+ (tmp->select_mode == ELM_OBJECT_SELECT_MODE_ALWAYS)))
break;
tmp = ELM_GEN_ITEM_FROM_INLIST(EINA_INLIST_GET(tmp)->next);
}
else
while ((tmp) && (tmp->generation < sd->generation))
{
- if (!elm_object_item_disabled_get((Elm_Object_Item *)tmp))
+ if (!elm_object_item_disabled_get((Elm_Object_Item *)tmp) &&
+ ((tmp->select_mode == ELM_OBJECT_SELECT_MODE_DEFAULT) ||
+ (tmp->select_mode == ELM_OBJECT_SELECT_MODE_ALWAYS)))
break;
tmp = ELM_GEN_ITEM_FROM_INLIST(EINA_INLIST_GET(tmp)->prev);
}
{
while (tmp)
{
- if (!elm_object_item_disabled_get((Elm_Object_Item *)tmp))
- break;
+ if (!elm_object_item_disabled_get((Elm_Object_Item *)tmp) &&
+ ((tmp->select_mode == ELM_OBJECT_SELECT_MODE_DEFAULT) ||
+ (tmp->select_mode == ELM_OBJECT_SELECT_MODE_ALWAYS)))
+ break;
tmp = ELM_GEN_ITEM_FROM_INLIST(EINA_INLIST_GET(tmp)->next);
}
}
{
while (tmp)
{
- if (!elm_object_item_disabled_get((Elm_Object_Item *)tmp))
+ if (!elm_object_item_disabled_get((Elm_Object_Item *)tmp) &&
+ ((tmp->select_mode == ELM_OBJECT_SELECT_MODE_DEFAULT) ||
+ (tmp->select_mode == ELM_OBJECT_SELECT_MODE_ALWAYS)))
break;
tmp = ELM_GEN_ITEM_FROM_INLIST(EINA_INLIST_GET(tmp)->prev);
}
return tmp;
}
-static Eina_Bool _item_focused_next(Elm_Genlist_Smart_Data *sd, Focus_Dir dir)
+static Eina_Bool _item_focus_next(Elm_Genlist_Smart_Data *sd, Focus_Dir dir)
{
Elm_Gen_Item *it = NULL;
Elm_Gen_Item *old_focused = sd->focused;
if (sd->select_on_focus_enabled) x -= step_x;
else
{
- return _item_focused_next(sd, FOCUS_DIR_LEFT);
+ return _item_focus_next(sd, FOCUS_DIR_LEFT);
}
}
else if ((!strcmp(ev->keyname, "Right")) ||
if (sd->select_on_focus_enabled) x += step_x;
else
{
- return _item_focused_next(sd, FOCUS_DIR_LEFT);
+ return _item_focus_next(sd, FOCUS_DIR_LEFT);
}
}
else if ((!strcmp(ev->keyname, "Up")) ||
}
else
{
- if (_item_focused_next(sd, FOCUS_DIR_UP))
+ if (_item_focus_next(sd, FOCUS_DIR_UP))
{
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
return EINA_TRUE;
}
else
{
- if (_item_focused_next(sd, FOCUS_DIR_DOWN))
+ if (_item_focus_next(sd, FOCUS_DIR_DOWN))
{
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
return EINA_TRUE;
else
{
_item_unfocused(sd->focused);
- _item_focused_next(sd, FOCUS_DIR_DOWN);
+ _item_focus_next(sd, FOCUS_DIR_DOWN);
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
}
return EINA_TRUE;
{
_item_unfocused(sd->focused);
sd->focused = ELM_GEN_ITEM_FROM_INLIST(sd->items->last);
- _item_focused_next(sd, FOCUS_DIR_UP);
+ _item_focus_next(sd, FOCUS_DIR_UP);
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
}
return EINA_TRUE;
if (sd->focused)
_item_focused(sd->focused);
else
- _item_focused_next(sd, FOCUS_DIR_DOWN);
+ _item_focus_next(sd, FOCUS_DIR_DOWN);
}
}
else
if (dir == FOCUS_DIR_DOWN || dir == FOCUS_DIR_UP)
{
- if (sd->focused)
+ if (dir == FOCUS_DIR_DOWN)
{
- Eina_List *l = eina_list_data_find_list(sd->items, sd->focused);
- if (dir == FOCUS_DIR_DOWN)
- it = (Elm_List_Item *)eina_list_data_get(eina_list_next(l));
- else
- it = (Elm_List_Item *)eina_list_data_get(eina_list_prev(l));
- _item_unfocused((Elm_List_Item *)sd->focused);
+ if (sd->focused)
+ {
+ Eina_List *l = eina_list_data_find_list(sd->items, sd->focused);
+ it = (Elm_List_Item *)eina_list_data_get(eina_list_next(l));
+ _item_unfocused((Elm_List_Item *)sd->focused);
+ }
+ else it = (Elm_List_Item *)eina_list_data_get(sd->items);
}
- else
+ else if (dir == FOCUS_DIR_UP)
{
- if (dir == FOCUS_DIR_DOWN)
- it = (Elm_List_Item *)eina_list_data_get(sd->items);
- else
- it = (Elm_List_Item *)eina_list_data_get(eina_list_last(sd->items));
+ if (sd->focused)
+ {
+ Eina_List *l = eina_list_data_find_list(sd->items, sd->focused);
+ it = (Elm_List_Item *)eina_list_data_get(eina_list_prev(l));
+ _item_unfocused((Elm_List_Item *)sd->focused);
+ }
+ else it = (Elm_List_Item *)eina_list_data_get(eina_list_last(sd->items));
}
+
if (!it)
{
_item_focused(old_focused);