if (!sd->multi) return EINA_FALSE;
prev = elm_genlist_item_prev_get(sd->last_selected_item);
+ while (prev)
+ {
+ if ((((Elm_Gen_Item*)prev)->generation == sd->generation) &&
+ (!elm_object_item_disabled_get(prev)))
+ break;
+ prev = (Elm_Object_Item *)ELM_GEN_ITEM_FROM_INLIST(
+ EINA_INLIST_GET((Elm_Gen_Item *)prev)->prev);
+ }
if (!prev) return EINA_TRUE;
if (elm_genlist_item_selected_get(prev))
if (!sd->multi) return EINA_FALSE;
next = elm_genlist_item_next_get(sd->last_selected_item);
+ while ((next))
+ {
+ if ((((Elm_Gen_Item *)next)->generation == sd->generation) &&
+ (!elm_object_item_disabled_get(next)))
+ break;
+ next = (Elm_Object_Item *)ELM_GEN_ITEM_FROM_INLIST(
+ EINA_INLIST_GET((Elm_Gen_Item *)next)->next);
+ }
if (!next) return EINA_TRUE;
if (elm_genlist_item_selected_get(next))
static Eina_Bool
_item_single_select_up(Elm_Genlist_Smart_Data *sd)
{
- Elm_Gen_Item *prev;
+ Elm_Gen_Item *prev = NULL;
if (!sd->selected)
- {
- prev = ELM_GEN_ITEM_FROM_INLIST(sd->items->last);
- while ((prev) && (prev->generation < sd->generation))
- prev = ELM_GEN_ITEM_FROM_INLIST(EINA_INLIST_GET(prev)->prev);
- }
+ prev = ELM_GEN_ITEM_FROM_INLIST(sd->items->last);
else
prev = (Elm_Gen_Item *)elm_genlist_item_prev_get
- (sd->last_selected_item);
+ (sd->last_selected_item);
+
+ printf("last %p prev %p\n", sd->last_selected_item, prev);
+ while (prev)
+ {
+ if ((prev->generation == sd->generation) &&
+ (!elm_object_item_disabled_get((Elm_Object_Item *)prev)))
+ break;
+ prev = ELM_GEN_ITEM_FROM_INLIST(EINA_INLIST_GET(prev)->prev);
+ }
+ printf("prev %p\n", prev);
if (!prev) return EINA_FALSE;
_all_items_deselect(sd);
static Eina_Bool
_item_single_select_down(Elm_Genlist_Smart_Data *sd)
{
- Elm_Gen_Item *next;
+ Elm_Gen_Item *next = NULL;
if (!sd->selected)
+ next = ELM_GEN_ITEM_FROM_INLIST(sd->items);
+ else
{
- next = ELM_GEN_ITEM_FROM_INLIST(sd->items);
- while ((next) && (next->generation < sd->generation))
- next = ELM_GEN_ITEM_FROM_INLIST(EINA_INLIST_GET(next)->next);
+ next = (Elm_Gen_Item *)elm_genlist_item_next_get
+ (sd->last_selected_item);
+ }
+
+ while ((next))
+ {
+ if ((next->generation == sd->generation) &&
+ (!elm_object_item_disabled_get((Elm_Object_Item *)next)))
+ break;
+ next = ELM_GEN_ITEM_FROM_INLIST(EINA_INLIST_GET(next)->next);
}
- else
- next = (Elm_Gen_Item *)elm_genlist_item_next_get
- (sd->last_selected_item);
if (!next) return EINA_FALSE;