diff --git a/legacy/elementary/config/default/base.src b/legacy/elementary/config/default/base.src index 73aff115a9..3f482581d4 100644 --- a/legacy/elementary/config/default/base.src +++ b/legacy/elementary/config/default/base.src @@ -26,6 +26,7 @@ group "Elm_Config" struct { value "scroll_smooth_history_weight" double: 0.1; value "scroll_smooth_future_time" double: 0.0; value "scroll_smooth_time_window" double: 0.01; + value "focus_auto_scroll_bring_in_enable" uchar: 0; value "scale" double: 1.0; value "bgpixmap" int: 0; value "compositing" int: 1; diff --git a/legacy/elementary/config/mobile/base.src b/legacy/elementary/config/mobile/base.src index 4fb7f07055..6f2d976e7e 100644 --- a/legacy/elementary/config/mobile/base.src +++ b/legacy/elementary/config/mobile/base.src @@ -26,6 +26,7 @@ group "Elm_Config" struct { value "scroll_smooth_history_weight" double: 0.1; value "scroll_smooth_future_time" double: 0.0; value "scroll_smooth_time_window" double: 0.01; + value "focus_auto_scroll_bring_in_enable" uchar: 0; value "scale" double: 1.0; value "bgpixmap" int: 0; value "compositing" int: 1; diff --git a/legacy/elementary/config/standard/base.src b/legacy/elementary/config/standard/base.src index 6552e83f55..7472f1f6a3 100644 --- a/legacy/elementary/config/standard/base.src +++ b/legacy/elementary/config/standard/base.src @@ -26,6 +26,7 @@ group "Elm_Config" struct { value "scroll_smooth_history_weight" double: 0.1; value "scroll_smooth_future_time" double: 0.0; value "scroll_smooth_time_window" double: 0.01; + value "focus_auto_scroll_bring_in_enable" uchar: 0; value "scale" double: 1.0; value "bgpixmap" int: 0; value "compositing" int: 1; diff --git a/legacy/elementary/src/bin/test_gengrid.c b/legacy/elementary/src/bin/test_gengrid.c index cac0973b5f..9b49762fe5 100644 --- a/legacy/elementary/src/bin/test_gengrid.c +++ b/legacy/elementary/src/bin/test_gengrid.c @@ -1362,6 +1362,14 @@ _test_gengrid_focus_focus_animate_check_changed(void *data, elm_check_state_get(obj)); } +static void +_test_gengrid_focus_bring_in_changed(void *data EINA_UNUSED, + Evas_Object *obj, + void *event_info EINA_UNUSED) +{ + elm_config_focus_auto_scroll_bring_in_enabled_set(elm_check_state_get(obj)); +} + static void _grid_reorder_mode(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) @@ -1486,6 +1494,15 @@ 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, "Focus Auto scroll bring in enable"); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, 0.0); + evas_object_smart_callback_add(ck, "changed", _test_gengrid_focus_bring_in_changed, + NULL); + elm_check_state_set(ck, elm_config_focus_auto_scroll_bring_in_enabled_get()); + elm_box_pack_end(bx_opt, ck); + evas_object_show(ck); + //Focus movement policy fr = elm_frame_add(bx); elm_object_text_set(fr, "Focus Movement Policy"); diff --git a/legacy/elementary/src/bin/test_genlist.c b/legacy/elementary/src/bin/test_genlist.c index 4557804fb3..12e9a02fba 100644 --- a/legacy/elementary/src/bin/test_genlist.c +++ b/legacy/elementary/src/bin/test_genlist.c @@ -3800,6 +3800,14 @@ _focus_button_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, printf("Button clicked: %s\n", (char *)data); } +static void +_test_genlist_focus_bring_in_changed(void *data EINA_UNUSED, + Evas_Object *obj, + void *event_info EINA_UNUSED) +{ + elm_config_focus_auto_scroll_bring_in_enabled_set(elm_check_state_get(obj)); +} + void test_genlist_focus(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, @@ -3963,6 +3971,15 @@ 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, "Focus Auto scroll bring in enable"); + evas_object_size_hint_weight_set(chk, EVAS_HINT_EXPAND, 0.0); + evas_object_smart_callback_add(chk, "changed", _test_genlist_focus_bring_in_changed, + NULL); + elm_check_state_set(chk, elm_config_focus_auto_scroll_bring_in_enabled_get()); + elm_box_pack_end(bx_opt, chk); + evas_object_show(chk); + // Focus Movement Policy fr = elm_frame_add(bx); elm_object_text_set(fr, "Focus Movement Policy"); diff --git a/legacy/elementary/src/bin/test_list.c b/legacy/elementary/src/bin/test_list.c index 4939f2f162..c7807983c7 100644 --- a/legacy/elementary/src/bin/test_list.c +++ b/legacy/elementary/src/bin/test_list.c @@ -1396,6 +1396,14 @@ _focus_button_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, printf("Button clicked: %s\n", (char *)data); } +static void +_test_list_focus_bring_in_changed(void *data EINA_UNUSED, + Evas_Object *obj, + void *event_info EINA_UNUSED) +{ + elm_config_focus_auto_scroll_bring_in_enabled_set(elm_check_state_get(obj)); +} + static void _test_list_focus(const char *name, const char *title, Eina_Bool horiz) { @@ -1532,6 +1540,15 @@ _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, "Focus Auto scroll bring in enable"); + evas_object_size_hint_weight_set(chk, EVAS_HINT_EXPAND, 0.0); + evas_object_smart_callback_add(chk, "changed", _test_list_focus_bring_in_changed, + NULL); + elm_check_state_set(chk, elm_config_focus_auto_scroll_bring_in_enabled_get()); + elm_box_pack_end(bx_opt, chk); + evas_object_show(chk); + // Focus Movement Policy fr = elm_frame_add(bx); elm_object_text_set(fr, "Focus Movement Policy"); diff --git a/legacy/elementary/src/bin/test_toolbar.c b/legacy/elementary/src/bin/test_toolbar.c index 1487c175b7..510899f5c2 100644 --- a/legacy/elementary/src/bin/test_toolbar.c +++ b/legacy/elementary/src/bin/test_toolbar.c @@ -1126,6 +1126,14 @@ test_toolbar_focus_focus_move_policy_changed(void *data EINA_UNUSED, elm_config_focus_move_policy_set(ELM_FOCUS_MOVE_POLICY_IN); } +static void +_test_toolbar_focus_bring_in_changed(void *data EINA_UNUSED, + Evas_Object *obj, + void *event_info EINA_UNUSED) +{ + elm_config_focus_auto_scroll_bring_in_enabled_set(elm_check_state_get(obj)); +} + void test_toolbar_focus(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { @@ -1212,6 +1220,16 @@ test_toolbar_focus(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *e evas_object_smart_callback_add(chk, "changed", _test_toolbar_focus_focus_animate_check_changed, win); + + chk = elm_check_add(bx_opt); + elm_object_text_set(chk, "Focus Auto scroll bring in enable"); + evas_object_size_hint_weight_set(chk, EVAS_HINT_EXPAND, 0.0); + evas_object_smart_callback_add(chk, "changed", _test_toolbar_focus_bring_in_changed, + NULL); + elm_check_state_set(chk, elm_config_focus_auto_scroll_bring_in_enabled_get()); + elm_box_pack_end(bx_opt, chk); + evas_object_show(chk); + // Focus movement policy fr = elm_frame_add(bx); elm_object_text_set(fr, "Focus Movement Policy"); diff --git a/legacy/elementary/src/lib/elm_config.c b/legacy/elementary/src/lib/elm_config.c index f80a62b97a..59e287fb9b 100644 --- a/legacy/elementary/src/lib/elm_config.c +++ b/legacy/elementary/src/lib/elm_config.c @@ -507,6 +507,7 @@ _desc_init(void) ELM_CONFIG_VAL(D, T, scroll_smooth_history_weight, T_DOUBLE); ELM_CONFIG_VAL(D, T, scroll_smooth_future_time, T_DOUBLE); ELM_CONFIG_VAL(D, T, scroll_smooth_time_window, T_DOUBLE); + ELM_CONFIG_VAL(D, T, focus_auto_scroll_bring_in_enable, T_UCHAR); ELM_CONFIG_VAL(D, T, scale, T_DOUBLE); ELM_CONFIG_VAL(D, T, bgpixmap, T_INT); ELM_CONFIG_VAL(D, T, compositing, T_INT); @@ -2027,6 +2028,9 @@ _env_get(void) if (s) _elm_config->scroll_smooth_future_time = _elm_atof(s); s = getenv("ELM_SCROLL_SMOOTH_TIME_WINDOW"); if (s) _elm_config->scroll_smooth_time_window = _elm_atof(s); + s = getenv("ELM_FOCUS_AUTO_SCROLL_BRING_IN_ENABLE"); + if (s) _elm_config->focus_auto_scroll_bring_in_enable = !!atoi(s); + s = getenv("ELM_THEME"); if (s) eina_stringshare_replace(&_elm_config->theme, s); @@ -2923,6 +2927,18 @@ elm_config_scroll_thumbscroll_acceleration_weight_set(double weight) _elm_config->thumbscroll_acceleration_weight = weight; } +EAPI Eina_Bool +elm_config_focus_auto_scroll_bring_in_enabled_get(void) +{ + return _elm_config->focus_auto_scroll_bring_in_enable; +} + +EAPI void +elm_config_focus_auto_scroll_bring_in_enabled_set(Eina_Bool enabled) +{ + _elm_config->focus_auto_scroll_bring_in_enable = !!enabled; +} + EAPI void elm_config_longpress_timeout_set(double longpress_timeout) { diff --git a/legacy/elementary/src/lib/elm_config.h b/legacy/elementary/src/lib/elm_config.h index 4478068d24..c95818653e 100644 --- a/legacy/elementary/src/lib/elm_config.h +++ b/legacy/elementary/src/lib/elm_config.h @@ -550,6 +550,26 @@ EAPI double elm_config_scroll_thumbscroll_acceleration_weight_get(void); */ EAPI void elm_config_scroll_thumbscroll_acceleration_weight_set(double weight); +/** + * Get enable status of focus auto scroll bring in. + * + * @see elm_config_focus_auto_scroll_bring_in_enabled_set() + * @ingroup Focus + * @since 1.10 + */ +EAPI Eina_Bool elm_config_focus_auto_scroll_bring_in_enabled_get(void); + +/** + * Set enable status of focus auto scroll bring in. + * + * @param enabled enable scroll bring in if @c EINA_TRUE, disable otherwise + * + * @see elm_config_focus_auto_scroll_bring_in_enabled_get() + * @ingroup Focus + * @since 1.10 + */ +EAPI void elm_config_focus_auto_scroll_bring_in_enabled_set(Eina_Bool enabled); + /** * @} */ diff --git a/legacy/elementary/src/lib/elm_gengrid.c b/legacy/elementary/src/lib/elm_gengrid.c index dd30714cc0..bfcecaebf8 100644 --- a/legacy/elementary/src/lib/elm_gengrid.c +++ b/legacy/elementary/src/lib/elm_gengrid.c @@ -1487,8 +1487,12 @@ _elm_gengrid_item_focused(Elm_Gen_Item *it) (elm_widget_item_disabled_get(it))) return; - elm_gengrid_item_show - ((Elm_Object_Item *)it, ELM_GENGRID_ITEM_SCROLLTO_IN); + if (!_elm_config->focus_auto_scroll_bring_in_enable) + elm_gengrid_item_show + ((Elm_Object_Item *)it, ELM_GENGRID_ITEM_SCROLLTO_IN); + else + elm_gengrid_item_bring_in + ((Elm_Object_Item *)it, ELM_GENGRID_ITEM_SCROLLTO_IN); sd->focused_item = (Elm_Object_Item *)it; if (elm_widget_focus_highlight_enabled_get(obj)) diff --git a/legacy/elementary/src/lib/elm_genlist.c b/legacy/elementary/src/lib/elm_genlist.c index bf9298f0fd..22785bac5b 100644 --- a/legacy/elementary/src/lib/elm_genlist.c +++ b/legacy/elementary/src/lib/elm_genlist.c @@ -2432,7 +2432,12 @@ _elm_genlist_item_focused(Elm_Gen_Item *it) (elm_widget_item_disabled_get(it))) return; - elm_genlist_item_show((Elm_Object_Item *)it, ELM_GENLIST_ITEM_SCROLLTO_IN); + if (!_elm_config->focus_auto_scroll_bring_in_enable) + elm_genlist_item_show((Elm_Object_Item *)it, + ELM_GENLIST_ITEM_SCROLLTO_IN); + else + elm_genlist_item_bring_in((Elm_Object_Item *)it, + ELM_GENLIST_ITEM_SCROLLTO_IN); sd->focused_item = (Elm_Object_Item *)it; if (elm_widget_focus_highlight_enabled_get(obj)) diff --git a/legacy/elementary/src/lib/elm_list.c b/legacy/elementary/src/lib/elm_list.c index fd5def28b8..aeb91ae88e 100644 --- a/legacy/elementary/src/lib/elm_list.c +++ b/legacy/elementary/src/lib/elm_list.c @@ -1081,7 +1081,12 @@ _elm_list_item_focused(Elm_List_Item *it) evas_object_geometry_get(VIEW(it), &x, &y, &w, &h); evas_object_geometry_get(sd->hit_rect, &sx, &sy, &sw, &sh); if ((x < sx) || (y < sy)|| ((x + w) > (sx + sw)) || ((y + h) > (sy + sh))) - elm_list_item_show((Elm_Object_Item *)it); + { + if (!_elm_config->focus_auto_scroll_bring_in_enable) + elm_list_item_show((Elm_Object_Item *)it); + else + elm_list_item_bring_in((Elm_Object_Item *)it); + } sd->focused_item = (Elm_Object_Item *)it; if (elm_widget_focus_highlight_enabled_get(WIDGET(it))) { diff --git a/legacy/elementary/src/lib/elm_priv.h b/legacy/elementary/src/lib/elm_priv.h index 86afbed217..784823345b 100644 --- a/legacy/elementary/src/lib/elm_priv.h +++ b/legacy/elementary/src/lib/elm_priv.h @@ -234,6 +234,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 focus_auto_scroll_bring_in_enable; /**< This shows the enabled status of focus auto scroll bring in feature. This is disabled by default.*/ int toolbar_shrink_mode; unsigned char fileselector_expand_enable; unsigned char fileselector_double_tap_navigation_enable; diff --git a/legacy/elementary/src/lib/elm_toolbar.c b/legacy/elementary/src/lib/elm_toolbar.c index 455e94a206..45b61c29eb 100644 --- a/legacy/elementary/src/lib/elm_toolbar.c +++ b/legacy/elementary/src/lib/elm_toolbar.c @@ -601,7 +601,12 @@ _elm_toolbar_item_focused(Elm_Toolbar_Item *it) return; sd->focused_item = it; - elm_toolbar_item_show((Elm_Object_Item *)it, ELM_TOOLBAR_ITEM_SCROLLTO_IN); + if (!_elm_config->focus_auto_scroll_bring_in_enable) + elm_toolbar_item_show((Elm_Object_Item *)it, + ELM_TOOLBAR_ITEM_SCROLLTO_IN); + else + elm_toolbar_item_bring_in((Elm_Object_Item *)it, + ELM_TOOLBAR_ITEM_SCROLLTO_IN); if (elm_widget_focus_highlight_enabled_get(obj)) { edje_object_signal_emit