From: Tae-Hwan Kim Date: Tue, 11 Jun 2013 08:36:28 +0000 (+0900) Subject: [Genlist/Gengrid/List] Fix focus X-Git-Tag: accepted/tizen/20130927.071315^2~191 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9d287d85ffcd9e98eaf74ac30470900f3d453c5c;p=profile%2Fmobile%2Felementary.git [Genlist/Gengrid/List] Fix focus Focus is enabled only for default / always Change-Id: Ic02ef9e6b9276cd5edd54f2f3ae844fdd61d58d7 --- diff --git a/src/lib/elm_gengrid.c b/src/lib/elm_gengrid.c index f384489..9f28cde 100644 --- a/src/lib/elm_gengrid.c +++ b/src/lib/elm_gengrid.c @@ -1832,14 +1832,18 @@ static Elm_Gen_Item *_gengrid_item_focusable_search(Elm_Gen_Item *it, int dir) 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); } diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c index 3f09642..8b5e6d9 100644 --- a/src/lib/elm_genlist.c +++ b/src/lib/elm_genlist.c @@ -2649,8 +2649,10 @@ static Elm_Gen_Item *_item_focusable_search(Elm_Gen_Item *it, int dir) { 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); } } @@ -2658,7 +2660,9 @@ static Elm_Gen_Item *_item_focusable_search(Elm_Gen_Item *it, int dir) { 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); } @@ -2666,7 +2670,7 @@ static Elm_Gen_Item *_item_focusable_search(Elm_Gen_Item *it, int dir) 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; @@ -2793,7 +2797,7 @@ _elm_genlist_smart_event(Evas_Object *obj, 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")) || @@ -2802,7 +2806,7 @@ _elm_genlist_smart_event(Evas_Object *obj, 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")) || @@ -2819,7 +2823,7 @@ _elm_genlist_smart_event(Evas_Object *obj, } 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; @@ -2843,7 +2847,7 @@ _elm_genlist_smart_event(Evas_Object *obj, } 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; @@ -2865,7 +2869,7 @@ _elm_genlist_smart_event(Evas_Object *obj, 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; @@ -2884,7 +2888,7 @@ _elm_genlist_smart_event(Evas_Object *obj, { _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; @@ -2997,7 +3001,7 @@ _elm_genlist_smart_on_focus(Evas_Object *obj) if (sd->focused) _item_focused(sd->focused); else - _item_focused_next(sd, FOCUS_DIR_DOWN); + _item_focus_next(sd, FOCUS_DIR_DOWN); } } else diff --git a/src/lib/elm_list.c b/src/lib/elm_list.c index 3402814..9511e3d 100644 --- a/src/lib/elm_list.c +++ b/src/lib/elm_list.c @@ -254,22 +254,27 @@ static Eina_Bool _item_focused_next(Elm_List_Smart_Data *sd, Focus_Dir dir) 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);