elm_gengrid: improve genlist behaviour
authorMarcel Hollerbach <mail@marcel-hollerbach.de>
Wed, 12 Dec 2018 18:08:44 +0000 (19:08 +0100)
committerWonki Kim <wonki_.kim@samsung.com>
Tue, 18 Dec 2018 07:13:58 +0000 (16:13 +0900)
the new behaviour is (as genlist in the previous commit):
- focus the first item when down is pressed
- focus the last item when up is pressed
- do not go into the widget with tab or ctrl+tab and just return
immidiantly

fixes T6805

Reviewed-by: YeongJong Lee <yj34.lee@samsung.com>
Differential Revision: https://phab.enlightenment.org/D7454

src/lib/elementary/elm_gengrid.c
src/lib/elementary/elm_gengrid.eo

index 3dd5fca..4b5a6fc 100644 (file)
@@ -5338,6 +5338,49 @@ _elm_gengrid_efl_ui_focus_manager_setup_on_first_touch(Eo *obj, Elm_Gengrid_Data
       }
 }
 
+static Efl_Ui_Focus_Object*
+_select_candidate(Eo *obj, Elm_Gengrid_Data *pd, Efl_Ui_Focus_Direction direction)
+{
+   Elm_Object_Item *first = elm_gengrid_first_item_get(obj);
+   Elm_Object_Item *last = elm_gengrid_last_item_get(obj);
+
+   switch(direction)
+     {
+        case EFL_UI_FOCUS_DIRECTION_DOWN:
+        case EFL_UI_FOCUS_DIRECTION_RIGHT:
+          elm_object_item_focus_set(first, EINA_TRUE);
+          return obj;
+        break;
+        case EFL_UI_FOCUS_DIRECTION_UP:
+        case EFL_UI_FOCUS_DIRECTION_LEFT:
+          elm_object_item_focus_set(last, EINA_TRUE);
+          return obj;
+        break;
+        case EFL_UI_FOCUS_DIRECTION_NEXT:
+        case EFL_UI_FOCUS_DIRECTION_PREVIOUS:
+          //do not go further with logical movement
+          return NULL;
+        break;
+        default:
+          ERR("Uncaught focus direction");
+          return NULL;
+        break;
+     }
+}
+
+EOLIAN static Efl_Ui_Focus_Object*
+_elm_gengrid_efl_ui_focus_manager_move(Eo *obj, Elm_Gengrid_Data *pd, Efl_Ui_Focus_Direction direction)
+{
+   if (efl_ui_focus_manager_focus_get(obj) == obj)
+     {
+        return _select_candidate(obj, pd, direction);
+     }
+   else
+     {
+        return efl_ui_focus_manager_move(efl_super(obj, MY_CLASS), direction);
+     }
+}
+
 EOLIAN static Efl_Ui_Focus_Object*
 _elm_gengrid_efl_ui_focus_manager_manager_focus_get(const Eo *obj, Elm_Gengrid_Data *pd)
 {
index 8019934..62474d8 100644 (file)
@@ -535,6 +535,7 @@ class Elm.Gengrid (Efl.Ui.Layout, Efl.Ui.Focus.Composition, Elm.Interface_Scroll
       Efl.Ui.Widget.focus_state_apply;
       Efl.Ui.Focus.Manager.setup_on_first_touch;
       Efl.Ui.Focus.Manager.manager_focus { get; }
+      Efl.Ui.Focus.Manager.move;
 
       //TIZEN ONLY (20151009) : Accessibility: updated highlight change during gengrid scroll
       Elm.Interface_Scrollable.content_pos_set;