summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Juyung Seo <seojuyung2@gmail.com>2014-05-11 22:42:45 +0900
committerDaniel Juyung Seo <juyung.seo@samsung.com>2014-05-11 22:46:16 +0900
commitd000a25d19f1613898d31afa825f9c8613cb06bd (patch)
tree33ab24a7bc914671da243823bd2a41ad691f32c7
parent4e7b54066a45178abaa1b1c2a76c82e09c9392ac (diff)
downloadelementary-d000a25d19f1613898d31afa825f9c8613cb06bd.tar.gz
focus: Change new API names related to focus auto scrolling.
elm_config_focus_auto_scroll_bring_in_enabled_get/set() -> elm_config_focus_autoscroll_mode_get/set() The main reason is that bring_in_enabled_get/set() APIs are too restricted and thus not flexible. I got more requirements for the focus autoscrolling such as none, wholely visible not just bring_in and show. So it is correct to add mode_set/get() APIs for the focus auto scrolling. Thanks god, we've found this before the release :) @feature
-rw-r--r--config/default/base.src2
-rw-r--r--config/mobile/base.src2
-rw-r--r--config/standard/base.src2
-rw-r--r--src/bin/config.c84
-rw-r--r--src/bin/test_gengrid.c23
-rw-r--r--src/bin/test_genlist.c86
-rw-r--r--src/bin/test_list.c21
-rw-r--r--src/bin/test_toolbar.c21
-rw-r--r--src/lib/elm_config.c24
-rw-r--r--src/lib/elm_config.h38
-rw-r--r--src/lib/elm_gengrid.c16
-rw-r--r--src/lib/elm_genlist.c18
-rw-r--r--src/lib/elm_list.c15
-rw-r--r--src/lib/elm_priv.h2
-rw-r--r--src/lib/elm_toolbar.c18
-rw-r--r--src/lib/elm_widget.c16
16 files changed, 265 insertions, 123 deletions
diff --git a/config/default/base.src b/config/default/base.src
index 3f482581d..1bf94c311 100644
--- a/config/default/base.src
+++ b/config/default/base.src
@@ -26,7 +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 "focus_autoscroll_mode" uchar: 0;
value "scale" double: 1.0;
value "bgpixmap" int: 0;
value "compositing" int: 1;
diff --git a/config/mobile/base.src b/config/mobile/base.src
index 6f2d976e7..590ffbf52 100644
--- a/config/mobile/base.src
+++ b/config/mobile/base.src
@@ -26,7 +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 "focus_autoscroll_mode" uchar: 0;
value "scale" double: 1.0;
value "bgpixmap" int: 0;
value "compositing" int: 1;
diff --git a/config/standard/base.src b/config/standard/base.src
index 7472f1f6a..6d2da5bda 100644
--- a/config/standard/base.src
+++ b/config/standard/base.src
@@ -26,7 +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 "focus_autoscroll_mode" uchar: 0;
value "scale" double: 1.0;
value "bgpixmap" int: 0;
value "compositing" int: 1;
diff --git a/src/bin/config.c b/src/bin/config.c
index ac7d3ac25..755cfba2e 100644
--- a/src/bin/config.c
+++ b/src/bin/config.c
@@ -1591,34 +1591,30 @@ _config_focus_highlight_clip_cb(void *data EINA_UNUSED, Evas_Object *obj,
}
static void
-_config_focus_auto_scroll_bring_in_cb(void *data EINA_UNUSED, Evas_Object *obj,
+_config_focus_item_select_on_focus_cb(void *data EINA_UNUSED, Evas_Object *obj,
void *event_info EINA_UNUSED)
{
- Eina_Bool cf = elm_config_focus_auto_scroll_bring_in_enabled_get();
+ Eina_Bool cf = elm_config_item_select_on_focus_disabled_get();
Eina_Bool val = elm_check_state_get(obj);
if (cf == val) return;
- elm_config_focus_auto_scroll_bring_in_enabled_set(val);
+ elm_config_item_select_on_focus_disabled_set(val);
elm_config_all_flush();
}
static void
-_config_focus_item_select_on_focus_cb(void *data EINA_UNUSED, Evas_Object *obj,
- void *event_info EINA_UNUSED)
+_status_config_focus_autoscroll_changed_cb(void *data EINA_UNUSED,
+ Evas_Object *obj,
+ void *event_info EINA_UNUSED)
{
- Eina_Bool cf = elm_config_item_select_on_focus_disabled_get();
- Eina_Bool val = elm_check_state_get(obj);
-
- if (cf == val) return;
- elm_config_item_select_on_focus_disabled_set(val);
- elm_config_all_flush();
+ elm_config_focus_autoscroll_mode_set(elm_radio_value_get(obj));
}
static void
_status_config_focus(Evas_Object *win,
Evas_Object *naviframe)
{
- Evas_Object *bx, *ck;
+ Evas_Object *bx, *ck, *fr;
bx = elm_box_add(win);
@@ -1642,19 +1638,69 @@ _status_config_focus(Evas_Object *win,
_config_focus_highlight_clip_cb, NULL);
elm_check_state_set(ck, elm_config_focus_highlight_clip_disabled_get());
- CHECK_ADD("Enable Auto Scroll Bring-in",
- "Set whether enable/disable auto scroll bring-in feature<br/>"
- "This is disabled by default so auto scrolling works by show not"
- "by bring-in.",
- _config_focus_auto_scroll_bring_in_cb, NULL);
- elm_check_state_set(ck, elm_config_focus_auto_scroll_bring_in_enabled_get());
-
CHECK_ADD("Disable Item Select on Focus",
"Set whether item would be selected on item focus.<br/>"
"This is enabled by default.",
_config_focus_item_select_on_focus_cb, NULL);
elm_check_state_set(ck, elm_config_item_select_on_focus_disabled_get());
+ fr = elm_frame_add(bx);
+ elm_object_text_set(fr, "Focus Autoscroll Mode");
+ evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, 0.5);
+ elm_box_pack_end(bx, fr);
+ evas_object_show(fr);
+ {
+ Evas_Object *bx2, *rdg, *rd;
+ bx2 = elm_box_add(fr);
+ elm_object_content_set(fr, bx2);
+ evas_object_show(bx2);
+
+ rdg = rd = elm_radio_add(bx2);
+ elm_radio_state_value_set(rd, ELM_FOCUS_AUTOSCROLL_MODE_SHOW);
+ elm_object_text_set(rd, "ELM_FOCUS_AUTOSCROLL_MODE_SHOW");
+ elm_object_tooltip_text_set(rd, "Directly show the focused region<br/>"
+ "or item automatically inside a scroller.");
+ evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set(rd, 0.0, EVAS_HINT_FILL);
+ elm_box_pack_end(bx2, rd);
+ evas_object_show(rd);
+ evas_object_smart_callback_add(rd, "changed",
+ _status_config_focus_autoscroll_changed_cb,
+ NULL);
+
+ rd = elm_radio_add(bx2);
+ elm_radio_state_value_set(rd, ELM_FOCUS_AUTOSCROLL_MODE_NONE);
+ elm_object_text_set(rd, "ELM_FOCUS_AUTOSCROLL_MODE_NONE");
+ elm_object_tooltip_text_set(rd, "Do not show the focused region or<br/>"
+ "item automatically inside a scroller.");
+ evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set(rd, 0.0, EVAS_HINT_FILL);
+ elm_box_pack_end(bx2, rd);
+ elm_radio_group_add(rd, rdg);
+ evas_object_show(rd);
+ evas_object_smart_callback_add(rd, "changed",
+ _status_config_focus_autoscroll_changed_cb,
+ NULL);
+
+
+ rd = elm_radio_add(bx2);
+ elm_radio_state_value_set(rd, ELM_FOCUS_AUTOSCROLL_MODE_BRING_IN);
+ elm_object_text_set(rd, "ELM_FOCUS_AUTOSCROLL_MODE_BRING_IN");
+ elm_object_tooltip_text_set(rd, "Bring in the focused region or item<br/>"
+ "automatically which might invole the scrolling.");
+ evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set(rd, 0.0, EVAS_HINT_FILL);
+ elm_box_pack_end(bx2, rd);
+ elm_radio_group_add(rd, rdg);
+ evas_object_show(rd);
+ evas_object_smart_callback_add(rd, "changed",
+ _status_config_focus_autoscroll_changed_cb,
+ NULL);
+
+ elm_radio_value_set(rdg, elm_config_focus_autoscroll_mode_get());
+ }
+
evas_object_data_set(win, "focus", bx);
elm_naviframe_item_simple_push(naviframe, bx);
diff --git a/src/bin/test_gengrid.c b/src/bin/test_gengrid.c
index 784bfa965..5d58b5b79 100644
--- a/src/bin/test_gengrid.c
+++ b/src/bin/test_gengrid.c
@@ -5,6 +5,8 @@
#endif
#include <Elementary.h>
+Evas_Object * _focus_autoscroll_mode_frame_create(Evas_Object *parent);
+
static Elm_Gengrid_Item_Class *gic, *ggic;
Evas_Object *grid_content_get(void *data, Evas_Object *obj, const char *part);
@@ -1391,14 +1393,6 @@ _gg_focus_focus_animate_changed_cb(void *data,
}
static void
-_gg_focus_bring_in_changed_cb(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)
{
@@ -1532,15 +1526,6 @@ test_gengrid_focus(void *data EINA_UNUSED,
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", _gg_focus_bring_in_changed_cb,
- 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);
-
- ck = elm_check_add(bx_opt);
elm_object_text_set(ck, "Item Select on Focus disable");
elm_check_state_set(ck, elm_config_item_select_on_focus_disabled_get());
evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, 0.0);
@@ -1550,6 +1535,10 @@ test_gengrid_focus(void *data EINA_UNUSED,
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);
+
//Focus movement policy
fr = elm_frame_add(bx);
elm_object_text_set(fr, "Focus Movement Policy");
diff --git a/src/bin/test_genlist.c b/src/bin/test_genlist.c
index cdaf14c11..ea9a4c6d1 100644
--- a/src/bin/test_genlist.c
+++ b/src/bin/test_genlist.c
@@ -3807,12 +3807,75 @@ _focus_button_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
printf("Button clicked: %s\n", (char *)data);
}
-static void
-_gl_focus_bring_in_changed_cb(void *data EINA_UNUSED,
- Evas_Object *obj,
- void *event_info EINA_UNUSED)
+void
+_focus_autoscroll_changed_cb(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));
+ elm_config_focus_autoscroll_mode_set(elm_radio_value_get(obj));
+}
+
+/* this function is used in another tests such as list, gengrid, and toolbar. */
+Evas_Object *
+_focus_autoscroll_mode_frame_create(Evas_Object *parent)
+{
+ Evas_Object *fr, *bx, *rdg, *rd;
+
+ fr = elm_frame_add(parent);
+ elm_object_text_set(fr, "Focus Autoscroll Mode");
+ evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, 0.5);
+ evas_object_show(fr);
+
+ bx = elm_box_add(fr);
+ elm_object_content_set(fr, bx);
+ evas_object_show(bx);
+
+ rdg = rd = elm_radio_add(bx);
+ elm_radio_state_value_set(rd, ELM_FOCUS_AUTOSCROLL_MODE_SHOW);
+ elm_object_text_set(rd, "ELM_FOCUS_AUTOSCROLL_MODE_SHOW");
+ elm_object_tooltip_text_set(rd, "Directly show the focused region<br/>"
+ "or item automatically inside a scroller.");
+ evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set(rd, 0.0, EVAS_HINT_FILL);
+ elm_box_pack_end(bx, rd);
+ evas_object_show(rd);
+ evas_object_smart_callback_add(rd, "changed",
+ _focus_autoscroll_changed_cb,
+ NULL);
+
+ rd = elm_radio_add(bx);
+ elm_radio_state_value_set(rd, ELM_FOCUS_AUTOSCROLL_MODE_NONE);
+ elm_object_text_set(rd, "ELM_FOCUS_AUTOSCROLL_MODE_NONE");
+ elm_object_tooltip_text_set(rd, "Do not show the focused region or<br/>"
+ "item automatically inside a scroller.");
+ evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set(rd, 0.0, EVAS_HINT_FILL);
+ elm_box_pack_end(bx, rd);
+ elm_radio_group_add(rd, rdg);
+ evas_object_show(rd);
+ evas_object_smart_callback_add(rd, "changed",
+ _focus_autoscroll_changed_cb,
+ NULL);
+
+
+ rd = elm_radio_add(bx);
+ elm_radio_state_value_set(rd, ELM_FOCUS_AUTOSCROLL_MODE_BRING_IN);
+ elm_object_text_set(rd, "ELM_FOCUS_AUTOSCROLL_MODE_BRING_IN");
+ elm_object_tooltip_text_set(rd, "Bring in the focused region or item<br/>"
+ "automatically which might invole the scrolling.");
+ evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set(rd, 0.0, EVAS_HINT_FILL);
+ elm_box_pack_end(bx, rd);
+ elm_radio_group_add(rd, rdg);
+ evas_object_show(rd);
+ evas_object_smart_callback_add(rd, "changed",
+ _focus_autoscroll_changed_cb,
+ NULL);
+
+ elm_radio_value_set(rdg, elm_config_focus_autoscroll_mode_get());
+
+ return fr;
}
void
@@ -3979,15 +4042,6 @@ test_genlist_focus(void *data EINA_UNUSED,
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", _gl_focus_bring_in_changed_cb,
- 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);
-
- chk = elm_check_add(bx_opt);
elm_object_text_set(chk, "Item Select on Focus disable");
elm_check_state_set(chk, elm_config_item_select_on_focus_disabled_get());
evas_object_size_hint_weight_set(chk, EVAS_HINT_EXPAND, 0.0);
@@ -3997,6 +4051,10 @@ test_genlist_focus(void *data EINA_UNUSED,
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);
+
// Focus Movement Policy
fr = elm_frame_add(bx);
elm_object_text_set(fr, "Focus Movement Policy");
diff --git a/src/bin/test_list.c b/src/bin/test_list.c
index c7807983c..be96c75f7 100644
--- a/src/bin/test_list.c
+++ b/src/bin/test_list.c
@@ -5,6 +5,8 @@
#endif
#include <Elementary.h>
+Evas_Object * _focus_autoscroll_mode_frame_create(Evas_Object *parent);
+
struct _api_data
{
unsigned int state; /* What state we are testing */
@@ -1397,14 +1399,6 @@ _focus_button_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
}
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)
{
Evas_Object *win, *li, *btn, *bx, *bx2, *fr, *bx_opt, *chk, *bx_btn;
@@ -1540,14 +1534,9 @@ _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 Autoscroll Mode
+ fr = _focus_autoscroll_mode_frame_create(bx);
+ elm_box_pack_end(bx, fr);
// Focus Movement Policy
fr = elm_frame_add(bx);
diff --git a/src/bin/test_toolbar.c b/src/bin/test_toolbar.c
index 510899f5c..e1d2dd2dc 100644
--- a/src/bin/test_toolbar.c
+++ b/src/bin/test_toolbar.c
@@ -3,6 +3,8 @@
#endif
#include <Elementary.h>
+Evas_Object * _focus_autoscroll_mode_frame_create(Evas_Object *parent);
+
static void
_tb_sel1_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
@@ -1126,14 +1128,6 @@ 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)
{
@@ -1221,14 +1215,9 @@ 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, "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 Autoscroll Mode
+ fr = _focus_autoscroll_mode_frame_create(bx);
+ elm_box_pack_end(bx, fr);
// Focus movement policy
fr = elm_frame_add(bx);
diff --git a/src/lib/elm_config.c b/src/lib/elm_config.c
index ba01789f3..9d8632b99 100644
--- a/src/lib/elm_config.c
+++ b/src/lib/elm_config.c
@@ -528,7 +528,7 @@ _desc_init(void)
ELM_CONFIG_VAL(D, T, focus_highlight_animate, T_UCHAR);
ELM_CONFIG_VAL(D, T, focus_highlight_clip_disable, T_UCHAR);
ELM_CONFIG_VAL(D, T, focus_move_policy, T_UCHAR);
- ELM_CONFIG_VAL(D, T, focus_auto_scroll_bring_in_enable, 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, toolbar_shrink_mode, T_INT);
ELM_CONFIG_VAL(D, T, fileselector_expand_enable, T_UCHAR);
@@ -2027,8 +2027,16 @@ _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_FOCUS_AUTOSCROLL_MODE");
+ if (s)
+ {
+ if (!strcmp(s, "ELM_FOCUS_AUTOSCROLL_MODE_NONE"))
+ _elm_config->focus_autoscroll_mode = ELM_FOCUS_AUTOSCROLL_MODE_NONE;
+ else if (!strcmp(s, "ELM_FOCUS_AUTOSCROLL_MODE_BRING_IN"))
+ _elm_config->focus_autoscroll_mode = ELM_FOCUS_AUTOSCROLL_MODE_BRING_IN;
+ else
+ _elm_config->focus_autoscroll_mode = ELM_FOCUS_AUTOSCROLL_MODE_SHOW;
+ }
s = getenv("ELM_THEME");
if (s) eina_stringshare_replace(&_elm_config->theme, s);
@@ -2926,16 +2934,16 @@ 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)
+EAPI Elm_Focus_Autoscroll_Mode
+elm_config_focus_autoscroll_mode_get(void)
{
- return _elm_config->focus_auto_scroll_bring_in_enable;
+ return _elm_config->focus_autoscroll_mode;
}
EAPI void
-elm_config_focus_auto_scroll_bring_in_enabled_set(Eina_Bool enabled)
+elm_config_focus_autoscroll_mode_set(Elm_Focus_Autoscroll_Mode mode)
{
- _elm_config->focus_auto_scroll_bring_in_enable = !!enabled;
+ _elm_config->focus_autoscroll_mode = mode;
}
EAPI void
diff --git a/src/lib/elm_config.h b/src/lib/elm_config.h
index c95818653..8340661b7 100644
--- a/src/lib/elm_config.h
+++ b/src/lib/elm_config.h
@@ -551,24 +551,48 @@ 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.
+ * Focus Autoscroll Mode
*
- * @see elm_config_focus_auto_scroll_bring_in_enabled_set()
+ * @since 1.10
+ * @ingroup Focus
+ */
+typedef enum
+{
+ ELM_FOCUS_AUTOSCROLL_MODE_SHOW, /**< directly show the focused region or item automatically */
+ ELM_FOCUS_AUTOSCROLL_MODE_NONE, /**< do not show the focused region or item automatically */
+ ELM_FOCUS_AUTOSCROLL_MODE_BRING_IN /**< bring_in the focused region or item automatically which might invole the scrolling */
+} Elm_Focus_Autoscroll_Mode;
+
+/**
+ * Get focus auto scroll mode.
+ *
+ * When a region or an item is focused and it resides inside any scroller,
+ * elementary will automatically scroll the focused area to the visible
+ * viewport.
+ *
+ * @see elm_config_focus_autoscroll_mode_set()
* @ingroup Focus
* @since 1.10
*/
-EAPI Eina_Bool elm_config_focus_auto_scroll_bring_in_enabled_get(void);
+EAPI Elm_Focus_Autoscroll_Mode elm_config_focus_autoscroll_mode_get(void);
/**
- * Set enable status of focus auto scroll bring in.
+ * Set focus auto scroll mode.
+ *
+ * @param mode focus auto scroll mode. This can be one of the
+ * Elm_Focus_Autoscroll_Mode enum values.
*
- * @param enabled enable scroll bring in if @c EINA_TRUE, disable otherwise
+ * When a region or an item is focused and it resides inside any scroller,
+ * elementary will automatically scroll the focused area to the visible
+ * viewport.
+ * Focus auto scroll mode is set to @c ELM_FOCUS_AUTOSCROLL_MODE_SHOW by
+ * default historically.
*
- * @see elm_config_focus_auto_scroll_bring_in_enabled_get()
+ * @see elm_config_focus_autoscroll_mode_get()
* @ingroup Focus
* @since 1.10
*/
-EAPI void elm_config_focus_auto_scroll_bring_in_enabled_set(Eina_Bool enabled);
+EAPI void elm_config_focus_autoscroll_mode_set(Elm_Focus_Autoscroll_Mode mode);
/**
* @}
diff --git a/src/lib/elm_gengrid.c b/src/lib/elm_gengrid.c
index b91ddc5f2..3eebaf430 100644
--- a/src/lib/elm_gengrid.c
+++ b/src/lib/elm_gengrid.c
@@ -1487,12 +1487,20 @@ _elm_gengrid_item_focused(Elm_Gen_Item *it)
(elm_widget_item_disabled_get(it)))
return;
- if (!_elm_config->focus_auto_scroll_bring_in_enable)
- elm_gengrid_item_show
+ switch (_elm_config->focus_autoscroll_mode)
+ {
+ case ELM_FOCUS_AUTOSCROLL_MODE_SHOW:
+ elm_gengrid_item_show
((Elm_Object_Item *)it, ELM_GENGRID_ITEM_SCROLLTO_IN);
- else
- elm_gengrid_item_bring_in
+ break;
+ case ELM_FOCUS_AUTOSCROLL_MODE_BRING_IN:
+ elm_gengrid_item_bring_in
((Elm_Object_Item *)it, ELM_GENGRID_ITEM_SCROLLTO_IN);
+ break;
+ default:
+ break;
+ }
+
sd->focused_item = (Elm_Object_Item *)it;
if (elm_widget_focus_highlight_enabled_get(obj))
diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c
index c220d340d..c524d1a05 100644
--- a/src/lib/elm_genlist.c
+++ b/src/lib/elm_genlist.c
@@ -2432,12 +2432,20 @@ _elm_genlist_item_focused(Elm_Gen_Item *it)
(elm_widget_item_disabled_get(it)))
return;
- 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,
+ switch (_elm_config->focus_autoscroll_mode)
+ {
+ case ELM_FOCUS_AUTOSCROLL_MODE_SHOW:
+ elm_genlist_item_show((Elm_Object_Item *)it,
ELM_GENLIST_ITEM_SCROLLTO_IN);
+ break;
+ case ELM_FOCUS_AUTOSCROLL_MODE_BRING_IN:
+ elm_genlist_item_bring_in((Elm_Object_Item *)it,
+ ELM_GENLIST_ITEM_SCROLLTO_IN);
+ break;
+ default:
+ break;
+ }
+
sd->focused_item = (Elm_Object_Item *)it;
if (elm_widget_focus_highlight_enabled_get(obj))
diff --git a/src/lib/elm_list.c b/src/lib/elm_list.c
index 9ebe5a11f..fcaa40ec9 100644
--- a/src/lib/elm_list.c
+++ b/src/lib/elm_list.c
@@ -1094,10 +1094,17 @@ _elm_list_item_focused(Elm_List_Item *it)
evas_object_geometry_get(sd->hit_rect, &sx, &sy, &sw, &sh);
if ((x < sx) || (y < sy)|| ((x + w) > (sx + sw)) || ((y + h) > (sy + sh)))
{
- 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);
+ switch (_elm_config->focus_autoscroll_mode)
+ {
+ case ELM_FOCUS_AUTOSCROLL_MODE_SHOW:
+ elm_list_item_show((Elm_Object_Item *)it);
+ break;
+ case ELM_FOCUS_AUTOSCROLL_MODE_BRING_IN:
+ elm_list_item_bring_in((Elm_Object_Item *)it);
+ break;
+ default:
+ break;
+ }
}
sd->focused_item = (Elm_Object_Item *)it;
if (elm_widget_focus_highlight_enabled_get(WIDGET(it)))
diff --git a/src/lib/elm_priv.h b/src/lib/elm_priv.h
index 784823345..2ee65cfa0 100644
--- a/src/lib/elm_priv.h
+++ b/src/lib/elm_priv.h
@@ -234,7 +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.*/
+ 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;
unsigned char fileselector_double_tap_navigation_enable;
diff --git a/src/lib/elm_toolbar.c b/src/lib/elm_toolbar.c
index dc3b58935..5ad643a36 100644
--- a/src/lib/elm_toolbar.c
+++ b/src/lib/elm_toolbar.c
@@ -601,12 +601,20 @@ _elm_toolbar_item_focused(Elm_Toolbar_Item *it)
return;
sd->focused_item = it;
- 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,
+ switch (_elm_config->focus_autoscroll_mode)
+ {
+ case ELM_FOCUS_AUTOSCROLL_MODE_SHOW:
+ elm_toolbar_item_show((Elm_Object_Item *)it,
ELM_TOOLBAR_ITEM_SCROLLTO_IN);
+ break;
+ case ELM_FOCUS_AUTOSCROLL_MODE_BRING_IN:
+ elm_toolbar_item_bring_in((Elm_Object_Item *)it,
+ ELM_TOOLBAR_ITEM_SCROLLTO_IN);
+ break;
+ default:
+ break;
+ }
+
if (elm_widget_focus_highlight_enabled_get(obj))
{
edje_object_signal_emit
diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c
index 96f385345..47f185550 100644
--- a/src/lib/elm_widget.c
+++ b/src/lib/elm_widget.c
@@ -645,10 +645,18 @@ _elm_widget_focus_region_show(Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUSED)
if (_elm_scrollable_is(o) && !elm_widget_disabled_get(o))
{
- if (!_elm_config->focus_auto_scroll_bring_in_enable)
- eo_do(o, elm_interface_scrollable_content_region_show(x, y, w, h));
- else
- eo_do(o, elm_interface_scrollable_region_bring_in(x, y, w, h));
+ switch (_elm_config->focus_autoscroll_mode)
+ {
+ case ELM_FOCUS_AUTOSCROLL_MODE_SHOW:
+ eo_do(o, elm_interface_scrollable_content_region_show(x, y, w, h));
+ break;
+ case ELM_FOCUS_AUTOSCROLL_MODE_BRING_IN:
+ eo_do(o, elm_interface_scrollable_region_bring_in(x, y, w, h));
+ break;
+ default:
+ break;
+ }
+
if (!elm_widget_focus_region_get(o, &x, &y, &w, &h))
{