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
This commit is contained in:
Anil Kumar Nahak 2014-07-21 18:55:55 +09:00 committed by Carsten Haitzler (Rasterman)
parent 52ab06e169
commit 76e3372531
14 changed files with 122 additions and 14 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -1326,6 +1326,13 @@ test_list_focus_item_select_on_focus_disable_changed(void *data EINA_UNUSED, Eva
elm_config_item_select_on_focus_disabled_set(elm_check_state_get(obj));
}
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)
{
@ -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);

View File

@ -1080,6 +1080,13 @@ _test_toolbar_focus_focus_animate_check_changed(void *data, Evas_Object *obj,
elm_check_state_get(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);

View File

@ -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);
@ -2735,6 +2740,18 @@ elm_config_item_select_on_focus_disabled_set(Eina_Bool disable)
_elm_config->item_select_on_focus_disable = !!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)
{

View File

@ -1342,6 +1342,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.

View File

@ -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)
{

View File

@ -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)
{

View File

@ -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)
{

View File

@ -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;

View File

@ -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);