raster pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=20b61442a71309e5feed9038bf802ed016bd0b3a

commit 20b61442a71309e5feed9038bf802ed016bd0b3a
Author: Anil Kumar Nahak <[email protected]>
Date:   Mon Jul 21 18:55:55 2014 +0900

    Focus: first item should be focused when there is no focused/selected item
    
    Summary: First item of widget should be focused when focus comes to the 
widget for first time.
    
    Test Plan:
    elementary_test -to "Genlist Focus"
    elementary_test -to "Gengrid Focus"
    elementary_test -to "List Focus"
    elementary_test -to "toolbar Focus"
    
    Reviewers: seoz
    
    Differential Revision: https://phab.enlightenment.org/D1135
---
 config/default/base.src.in  |  1 +
 config/mobile/base.src.in   |  1 +
 config/standard/base.src.in |  1 +
 src/bin/test_gengrid.c      | 17 +++++++++++++++++
 src/bin/test_genlist.c      | 17 +++++++++++++++++
 src/bin/test_list.c         | 17 +++++++++++++++++
 src/bin/test_toolbar.c      | 17 +++++++++++++++++
 src/lib/elm_config.c        | 17 +++++++++++++++++
 src/lib/elm_config.h        | 22 ++++++++++++++++++++++
 src/lib/elm_gengrid.c       |  5 ++---
 src/lib/elm_genlist.c       |  5 ++---
 src/lib/elm_list.c          |  7 +++----
 src/lib/elm_priv.h          |  1 +
 src/lib/elm_toolbar.c       |  8 ++++----
 14 files changed, 122 insertions(+), 14 deletions(-)

diff --git a/config/default/base.src.in b/config/default/base.src.in
index db264a0..cc3793e 100644
--- a/config/default/base.src.in
+++ b/config/default/base.src.in
@@ -47,6 +47,7 @@ group "Elm_Config" struct {
   value "focus_highlight_animate" uchar: 0;
   value "focus_highlight_clip_disable" uchar: 0;
   value "item_select_on_focus_disable" uchar: 0;
+  value "first_item_focus_on_first_focusin" uchar: 1;
   value "focus_move_policy" uchar: 0;
   value "toolbar_shrink_mode" int: 3;
   value "fileselector_expand_enable" uchar: 0;
diff --git a/config/mobile/base.src.in b/config/mobile/base.src.in
index 58da35d..e09332d 100644
--- a/config/mobile/base.src.in
+++ b/config/mobile/base.src.in
@@ -47,6 +47,7 @@ group "Elm_Config" struct {
   value "focus_highlight_animate" uchar: 0;
   value "focus_highlight_clip_disable" uchar: 0;
   value "item_select_on_focus_disable" uchar: 0;
+  value "first_item_focus_on_first_focusin" uchar: 1;
   value "focus_move_policy" uchar: 0;
   value "toolbar_shrink_mode" int: 3;
   value "fileselector_expand_enable" uchar: 0;
diff --git a/config/standard/base.src.in b/config/standard/base.src.in
index 1f7594d..cb2ae46 100644
--- a/config/standard/base.src.in
+++ b/config/standard/base.src.in
@@ -47,6 +47,7 @@ group "Elm_Config" struct {
   value "focus_highlight_animate" uchar: 0;
   value "focus_highlight_clip_disable" uchar: 1;
   value "item_select_on_focus_disable" uchar: 0;
+  value "first_item_focus_on_first_focusin" uchar: 1;
   value "focus_move_policy" uchar: 0;
   value "toolbar_shrink_mode" int: 3;
   value "fileselector_expand_enable" uchar: 1;
diff --git a/src/bin/test_gengrid.c b/src/bin/test_gengrid.c
index ba69f37..71b3ba6 100644
--- a/src/bin/test_gengrid.c
+++ b/src/bin/test_gengrid.c
@@ -1445,6 +1445,13 @@ _gg_focus_item_select_on_focus_disable_changed_cb(void 
*data EINA_UNUSED,
    elm_config_item_select_on_focus_disabled_set(elm_check_state_get(obj));
 }
 
+static void
+_gg_first_item_focus_on_first_focus_in_cb(void *data EINA_UNUSED, Evas_Object 
*obj,
+                                          void *event_info  EINA_UNUSED)
+{
+   elm_config_first_item_focus_on_first_focusin_set(elm_check_state_get(obj));
+}
+
 void
 test_gengrid_focus(void *data EINA_UNUSED,
                    Evas_Object *obj EINA_UNUSED,
@@ -1568,6 +1575,16 @@ test_gengrid_focus(void *data EINA_UNUSED,
    elm_box_pack_end(bx_opt, ck);
    evas_object_show(ck);
 
+   ck = elm_check_add(bx_opt);
+   elm_object_text_set(ck, "First item focus on first focus in");
+   elm_check_state_set(ck, elm_config_first_item_focus_on_first_focusin_get());
+   evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, 0.0);
+   evas_object_smart_callback_add(ck, "changed",
+                                  _gg_first_item_focus_on_first_focus_in_cb,
+                                  NULL);
+   elm_box_pack_end(bx_opt, ck);
+   evas_object_show(ck);
+
    // Focus Autoscroll Mode
    fr = _focus_autoscroll_mode_frame_create(bx);
    elm_box_pack_end(bx, fr);
diff --git a/src/bin/test_genlist.c b/src/bin/test_genlist.c
index bba0086..d553be5 100644
--- a/src/bin/test_genlist.c
+++ b/src/bin/test_genlist.c
@@ -4032,6 +4032,12 @@ _gl_focus_item_select_on_focus_disable_changed_cb(void 
*data EINA_UNUSED, Evas_O
    elm_config_item_select_on_focus_disabled_set(elm_check_state_get(obj));
 }
 
+static void
+_gl_first_item_focus_on_first_focus_in_cb(void *data EINA_UNUSED, Evas_Object 
*obj,
+                                          void *event_info  EINA_UNUSED)
+{
+   elm_config_first_item_focus_on_first_focusin_set(elm_check_state_get(obj));
+}
 static Eina_Bool
 _focus_timer_cb(void *data)
 {
@@ -4324,6 +4330,17 @@ test_genlist_focus(void *data EINA_UNUSED,
    elm_box_pack_end(bx_opt, chk);
    evas_object_show(chk);
 
+   chk = elm_check_add(bx_opt);
+   elm_object_text_set(chk, "First item focus on first focus in");
+   elm_check_state_set(chk, 
elm_config_first_item_focus_on_first_focusin_get());
+   evas_object_size_hint_weight_set(chk, EVAS_HINT_EXPAND, 0.0);
+   evas_object_smart_callback_add(chk, "changed",
+                                  _gl_first_item_focus_on_first_focus_in_cb,
+                                  NULL);
+   elm_box_pack_end(bx_opt, chk);
+   evas_object_show(chk);
+
+
    // Focus Autoscroll Mode
    fr = _focus_autoscroll_mode_frame_create(bx);
    elm_box_pack_end(bx, fr);
diff --git a/src/bin/test_list.c b/src/bin/test_list.c
index be96c75..e6a2967 100644
--- a/src/bin/test_list.c
+++ b/src/bin/test_list.c
@@ -1327,6 +1327,13 @@ 
test_list_focus_item_select_on_focus_disable_changed(void *data EINA_UNUSED, Eva
 }
 
 static void
+test_list_first_item_focus_on_first_focus_in_cb(void *data EINA_UNUSED, 
Evas_Object *obj,
+                                                void *event_info  EINA_UNUSED)
+{
+   elm_config_first_item_focus_on_first_focusin_set(elm_check_state_get(obj));
+}
+
+static void
 _item_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
 {
    printf("%s: %p\n", (char *)data, event_info);
@@ -1534,6 +1541,16 @@ _test_list_focus(const char *name, const char *title, 
Eina_Bool horiz)
    elm_box_pack_end(bx_opt, chk);
    evas_object_show(chk);
 
+   chk = elm_check_add(bx_opt);
+   elm_object_text_set(chk, "First item focus on first focus in");
+   elm_check_state_set(chk, 
elm_config_first_item_focus_on_first_focusin_get());
+   evas_object_size_hint_weight_set(chk, EVAS_HINT_EXPAND, 0.0);
+   evas_object_smart_callback_add(chk, "changed",
+                                  
test_list_first_item_focus_on_first_focus_in_cb,
+                                  NULL);
+   elm_box_pack_end(bx_opt, chk);
+   evas_object_show(chk);
+
    // Focus Autoscroll Mode
    fr = _focus_autoscroll_mode_frame_create(bx);
    elm_box_pack_end(bx, fr);
diff --git a/src/bin/test_toolbar.c b/src/bin/test_toolbar.c
index f535958..11c0757 100644
--- a/src/bin/test_toolbar.c
+++ b/src/bin/test_toolbar.c
@@ -1081,6 +1081,13 @@ _test_toolbar_focus_focus_animate_check_changed(void 
*data, Evas_Object *obj,
 }
 
 static void
+_test_toolbar_first_item_focus_on_first_focus_in_cb(void *data EINA_UNUSED, 
Evas_Object *obj,
+                                                    void *event_info  
EINA_UNUSED)
+{
+   elm_config_first_item_focus_on_first_focusin_set(elm_check_state_get(obj));
+}
+
+static void
 _toolbar_focus_key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED,
                            Evas_Object *obj EINA_UNUSED, void *event_info)
 {
@@ -1223,6 +1230,16 @@ test_toolbar_focus(void *data EINA_UNUSED, Evas_Object 
*obj EINA_UNUSED, void *e
                                   
_test_toolbar_focus_focus_animate_check_changed,
                                   win);
 
+   chk = elm_check_add(bx_opt);
+   elm_object_text_set(chk, "First item focus on first focus in");
+   elm_check_state_set(chk, 
elm_config_first_item_focus_on_first_focusin_get());
+   evas_object_size_hint_weight_set(chk, EVAS_HINT_EXPAND, 0.0);
+   elm_box_pack_end(bx_opt, chk);
+   evas_object_show(chk);
+   evas_object_smart_callback_add(chk, "changed",
+                                  
_test_toolbar_first_item_focus_on_first_focus_in_cb,
+                                  win);
+
    // Focus Autoscroll Mode
    fr = _focus_autoscroll_mode_frame_create(bx);
    elm_box_pack_end(bx, fr);
diff --git a/src/lib/elm_config.c b/src/lib/elm_config.c
index b308928..96430ce 100644
--- a/src/lib/elm_config.c
+++ b/src/lib/elm_config.c
@@ -529,6 +529,7 @@ _desc_init(void)
    ELM_CONFIG_VAL(D, T, focus_move_policy, T_UCHAR);
    ELM_CONFIG_VAL(D, T, focus_autoscroll_mode, T_UCHAR);
    ELM_CONFIG_VAL(D, T, item_select_on_focus_disable, T_UCHAR);
+   ELM_CONFIG_VAL(D, T, first_item_focus_on_first_focus_in, T_UCHAR);
    ELM_CONFIG_VAL(D, T, toolbar_shrink_mode, T_INT);
    ELM_CONFIG_VAL(D, T, fileselector_expand_enable, T_UCHAR);
    ELM_CONFIG_VAL(D, T, fileselector_double_tap_navigation_enable, T_UCHAR);
@@ -1546,6 +1547,7 @@ _config_load(void)
    _elm_config->focus_highlight_animate = EINA_TRUE;
    _elm_config->focus_highlight_clip_disable = EINA_FALSE;
    _elm_config->focus_move_policy = ELM_FOCUS_MOVE_POLICY_CLICK;
+   _elm_config->first_item_focus_on_first_focus_in = EINA_FALSE;
    _elm_config->item_select_on_focus_disable = EINA_TRUE;
    _elm_config->toolbar_shrink_mode = 2;
    _elm_config->fileselector_expand_enable = EINA_FALSE;
@@ -2166,6 +2168,9 @@ _env_get(void)
    s = getenv("ELM_ITEM_SELECT_ON_FOCUS_DISABLE");
    if (s) _elm_config->item_select_on_focus_disable = !!atoi(s);
 
+   s = getenv("ELM_FIRST_ITEM_FOCUS_ON_FIRST_FOCUS_IN");
+   if (s) _elm_config->first_item_focus_on_first_focus_in = !!atoi(s);
+
    s = getenv("ELM_TOOLBAR_SHRINK_MODE");
    if (s) _elm_config->toolbar_shrink_mode = atoi(s);
 
@@ -2736,6 +2741,18 @@ elm_config_item_select_on_focus_disabled_set(Eina_Bool 
disable)
 }
 
 EAPI Eina_Bool
+elm_config_first_item_focus_on_first_focusin_get(void)
+{
+   return _elm_config->first_item_focus_on_first_focus_in;
+}
+
+EAPI void
+elm_config_first_item_focus_on_first_focusin_set(Eina_Bool enable)
+{
+   _elm_config->first_item_focus_on_first_focus_in = !!enable;
+}
+
+EAPI Eina_Bool
 elm_config_scroll_bounce_enabled_get(void)
 {
    return _elm_config->thumbscroll_bounce_enable;
diff --git a/src/lib/elm_config.h b/src/lib/elm_config.h
index 9d29f37..7cf9a59 100644
--- a/src/lib/elm_config.h
+++ b/src/lib/elm_config.h
@@ -1343,6 +1343,28 @@ EAPI Eina_Bool 
elm_config_item_select_on_focus_disabled_get(void);
 EAPI void elm_config_item_select_on_focus_disabled_set(Eina_Bool enabled);
 
 /**
+ * Get status of first item focus on first focusin feature.
+ *
+ * @return The first item focus on first focusin status
+ *
+ * @see elm_config_first_item_focus_on_first_focusin_set
+ * @since 1.11
+ * @ingroup Focus
+ */
+EAPI Eina_Bool elm_config_first_item_focus_on_first_focusin_get(void);
+
+/**
+ * Set the first item focus on first focusin feature.
+ *
+ * @param enable first_item_focus_on_first_focusin if @c EINA_TRUE, enable 
otherwise
+ *
+ * @see elm_config_first_item_focus_on_first_focusin_get
+ * @since 1.11
+ * @ingroup Focus
+ */
+EAPI void elm_config_first_item_focus_on_first_focusin_set(Eina_Bool enabled);
+
+/**
  * Get the system mirrored mode. This determines the default mirrored mode
  * of widgets.
  *
diff --git a/src/lib/elm_gengrid.c b/src/lib/elm_gengrid.c
index e4c28f9..eb94d5f 100644
--- a/src/lib/elm_gengrid.c
+++ b/src/lib/elm_gengrid.c
@@ -2949,13 +2949,12 @@ _elm_gengrid_elm_widget_on_focus(Eo *obj, 
Elm_Gengrid_Data *sd)
           it = sd->last_focused_item;
         else if (sd->last_selected_item)
           it = sd->last_selected_item;
-        /* TODO: make it optional on 1.11. Disable this until then
-        else if (elm_widget_focus_highlight_enabled_get(obj))
+        else if (_elm_config->first_item_focus_on_first_focus_in &&
+                 elm_widget_focus_highlight_enabled_get(obj))
           {
              it = elm_gengrid_first_item_get(obj);
              is_sel = EINA_TRUE;
           }
-        */
 
         if (it)
           {
diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c
index cdf9456..7857d37 100644
--- a/src/lib/elm_genlist.c
+++ b/src/lib/elm_genlist.c
@@ -2932,13 +2932,12 @@ _elm_genlist_elm_widget_on_focus(Eo *obj, 
Elm_Genlist_Data *sd)
           it = sd->last_focused_item;
         else if (sd->last_selected_item)
           it = sd->last_selected_item;
-        /* TODO: make it optional on 1.11. Disable this until then
-        else if (elm_widget_focus_highlight_enabled_get(obj))
+        else if (_elm_config->first_item_focus_on_first_focus_in &&
+                 elm_widget_focus_highlight_enabled_get(obj))
           {
              it = elm_genlist_first_item_get(obj);
              is_sel = EINA_TRUE;
           }
-        */
 
         if (it)
           {
diff --git a/src/lib/elm_list.c b/src/lib/elm_list.c
index 09b1649..fa9c03a 100644
--- a/src/lib/elm_list.c
+++ b/src/lib/elm_list.c
@@ -1223,13 +1223,12 @@ _elm_list_elm_widget_on_focus(Eo *obj, Elm_List_Data 
*sd)
           it = sd->last_focused_item;
         else if (sd->last_selected_item)
           it = sd->last_selected_item;
-        /* TODO: make it optional on 1.11
-        else if (elm_widget_focus_highlight_enabled_get(obj))
+        else if (_elm_config->first_item_focus_on_first_focus_in &&
+                 elm_widget_focus_highlight_enabled_get(obj))
           {
-             it = eina_list_data_get(sd->items);
+             it = elm_list_first_item_get(obj);
              is_sel = EINA_TRUE;
           }
-        */
 
         if (it)
           {
diff --git a/src/lib/elm_priv.h b/src/lib/elm_priv.h
index e84bad5..c8d3e97 100644
--- a/src/lib/elm_priv.h
+++ b/src/lib/elm_priv.h
@@ -230,6 +230,7 @@ struct _Elm_Config
    unsigned char focus_highlight_clip_disable; /**< This shows disabled status 
of focus highlight clip feature. This value is false by default so the focus 
highlight is clipped. */
    unsigned char focus_move_policy; /**< This show how the elementary focus is 
moved to another object. Focus can be moved by click or mouse_in. */
    unsigned char item_select_on_focus_disable; /**< This shows the disabled 
status of select on focus feature. This value is false by default so that 
select on focus feature is enabled by default.*/
+   unsigned char first_item_focus_on_first_focus_in;  /**< This sets the first 
item focus on first focus in feature*/
    Elm_Focus_Autoscroll_Mode focus_autoscroll_mode; /**< This shows the focus 
auto scroll mode. By default, @c ELM_FOCUS_AUTOSCROLL_MODE_SHOW is set. */
    int           toolbar_shrink_mode;
    unsigned char fileselector_expand_enable;
diff --git a/src/lib/elm_toolbar.c b/src/lib/elm_toolbar.c
index fdaa4e0..5467739 100644
--- a/src/lib/elm_toolbar.c
+++ b/src/lib/elm_toolbar.c
@@ -740,10 +740,10 @@ _elm_toolbar_elm_widget_on_focus(Eo *obj, 
Elm_Toolbar_Data *sd)
      {
         if (sd->last_focused_item)
           it = sd->last_focused_item;
-        /* TODO: make it optional on 1.11. Disable this until then
-        else
-          it = (Elm_Object_Item *)ELM_TOOLBAR_ITEM_FROM_INLIST(sd->items);
-        */
+        else if (_elm_config->first_item_focus_on_first_focus_in &&
+                 elm_widget_focus_highlight_enabled_get(obj))
+          it = elm_toolbar_first_item_get(obj);
+
         if (it)
           {
              it = _elm_toolbar_nearest_visible_item_get(obj, it);

-- 


Reply via email to