[Genlist/Gengrid/List] Fix focus
authorTae-Hwan Kim <the81.kim@samsung.com>
Tue, 11 Jun 2013 08:36:28 +0000 (17:36 +0900)
committerSungho Kwak <sungho1.kwak@samsung.com>
Thu, 20 Jun 2013 12:29:05 +0000 (21:29 +0900)
Focus is enabled only for default / always

Change-Id: Ic02ef9e6b9276cd5edd54f2f3ae844fdd61d58d7

src/lib/elm_gengrid.c
src/lib/elm_genlist.c
src/lib/elm_list.c

index f384489..9f28cde 100644 (file)
@@ -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);
        }
index 3f09642..8b5e6d9 100644 (file)
@@ -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
index 3402814..9511e3d 100644 (file)
@@ -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);