summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHosang Kim <hosang12.kim@samsung.com>2019-02-26 16:52:54 +0900
committer김호상/Tizen Platform Lab(SR)/Engineer/삼성전자 <CORP\hosang12.kim@hosang.tn.corp.samsungelectronics.net>2019-02-26 16:53:13 +0900
commit493b095add08d0dba5860a34a4f769f271966d4e (patch)
tree540c814c0716b5c5228dbb884d628ea10683a131
parent27c848c35a0fbe2efa9f83e057313a74327b2047 (diff)
efl_ui_scroller: apply handling focus.
Summary: Focus manager is applied to process key events. Test Plan: elementary_test -> efl.ui.scroller Reviewers: SanghyeonLee, YOhoho, marcelhollerbach, bu5hm4n Reviewed By: bu5hm4n Subscribers: woohyun, Jaehyun_Cho, bu5hm4n, cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D7776
-rw-r--r--data/elementary/config/default/base.src.in103
-rw-r--r--data/elementary/config/mobile/base.src.in103
-rw-r--r--data/elementary/config/standard/base.src.in103
-rw-r--r--src/lib/elementary/efl_ui_scroller.c165
-rw-r--r--src/lib/elementary/efl_ui_scroller.eo5
-rw-r--r--src/lib/elementary/elm_priv.h2
6 files changed, 477 insertions, 4 deletions
diff --git a/data/elementary/config/default/base.src.in b/data/elementary/config/default/base.src.in
index 20670544eb..79f7a1bb55 100644
--- a/data/elementary/config/default/base.src.in
+++ b/data/elementary/config/default/base.src.in
@@ -1,5 +1,5 @@
1group "Elm_Config" struct { 1group "Elm_Config" struct {
2 value "config_version" int: 131092; 2 value "config_version" int: 131093;
3 value "entry_select_allow" uchar: 1; 3 value "entry_select_allow" uchar: 1;
4 value "engine" string: ""; 4 value "engine" string: "";
5 value "vsync" uchar: 0; 5 value "vsync" uchar: 0;
@@ -3153,5 +3153,106 @@ group "Elm_Config" struct {
3153 } 3153 }
3154 } 3154 }
3155 } 3155 }
3156 group "Elm_Config_Bindings_Widget" struct {
3157 value "name" string: "Efl.Ui.Scroller";
3158 group "key_bindings" list {
3159 group "Elm_Config_Binding_Key" struct {
3160 value "context" int: 0;
3161 value "key" string: "Left";
3162 value "action" string: "move";
3163 value "params" string: "left";
3164 }
3165 group "Elm_Config_Binding_Key" struct {
3166 value "context" int: 0;
3167 value "key" string: "KP_Left";
3168 value "action" string: "move";
3169 value "params" string: "left";
3170 }
3171 group "Elm_Config_Binding_Key" struct {
3172 value "context" int: 0;
3173 value "key" string: "Right";
3174 value "action" string: "move";
3175 value "params" string: "right";
3176 }
3177 group "Elm_Config_Binding_Key" struct {
3178 value "context" int: 0;
3179 value "key" string: "KP_Right";
3180 value "action" string: "move";
3181 value "params" string: "right";
3182 }
3183 group "Elm_Config_Binding_Key" struct {
3184 value "context" int: 0;
3185 value "key" string: "Up";
3186 value "action" string: "move";
3187 value "params" string: "up";
3188 }
3189 group "Elm_Config_Binding_Key" struct {
3190 value "context" int: 0;
3191 value "key" string: "KP_Up";
3192 value "action" string: "move";
3193 value "params" string: "up";
3194 }
3195 group "Elm_Config_Binding_Key" struct {
3196 value "context" int: 0;
3197 value "key" string: "Down";
3198 value "action" string: "move";
3199 value "params" string: "down";
3200 }
3201 group "Elm_Config_Binding_Key" struct {
3202 value "context" int: 0;
3203 value "key" string: "KP_Down";
3204 value "action" string: "move";
3205 value "params" string: "down";
3206 }
3207 group "Elm_Config_Binding_Key" struct {
3208 value "context" int: 0;
3209 value "key" string: "Home";
3210 value "action" string: "move";
3211 value "params" string: "first";
3212 }
3213 group "Elm_Config_Binding_Key" struct {
3214 value "context" int: 0;
3215 value "key" string: "KP_Home";
3216 value "action" string: "move";
3217 value "params" string: "first";
3218 }
3219 group "Elm_Config_Binding_Key" struct {
3220 value "context" int: 0;
3221 value "key" string: "End";
3222 value "action" string: "move";
3223 value "params" string: "last";
3224 }
3225 group "Elm_Config_Binding_Key" struct {
3226 value "context" int: 0;
3227 value "key" string: "KP_End";
3228 value "action" string: "move";
3229 value "params" string: "last";
3230 }
3231 group "Elm_Config_Binding_Key" struct {
3232 value "context" int: 0;
3233 value "key" string: "Prior";
3234 value "action" string: "move";
3235 value "params" string: "prior";
3236 }
3237 group "Elm_Config_Binding_Key" struct {
3238 value "context" int: 0;
3239 value "key" string: "KP_Prior";
3240 value "action" string: "move";
3241 value "params" string: "prior";
3242 }
3243 group "Elm_Config_Binding_Key" struct {
3244 value "context" int: 0;
3245 value "key" string: "Next";
3246 value "action" string: "move";
3247 value "params" string: "next";
3248 }
3249 group "Elm_Config_Binding_Key" struct {
3250 value "context" int: 0;
3251 value "key" string: "KP_Next";
3252 value "action" string: "move";
3253 value "params" string: "next";
3254 }
3255 }
3256 }
3156 } 3257 }
3157} 3258}
diff --git a/data/elementary/config/mobile/base.src.in b/data/elementary/config/mobile/base.src.in
index 00de42f095..9397150576 100644
--- a/data/elementary/config/mobile/base.src.in
+++ b/data/elementary/config/mobile/base.src.in
@@ -1,5 +1,5 @@
1group "Elm_Config" struct { 1group "Elm_Config" struct {
2 value "config_version" int: 131092; 2 value "config_version" int: 131093;
3 value "entry_select_allow" uchar: 1; 3 value "entry_select_allow" uchar: 1;
4 value "engine" string: ""; 4 value "engine" string: "";
5 value "vsync" uchar: 0; 5 value "vsync" uchar: 0;
@@ -3139,5 +3139,106 @@ group "Elm_Config" struct {
3139 } 3139 }
3140 } 3140 }
3141 } 3141 }
3142 group "Elm_Config_Bindings_Widget" struct {
3143 value "name" string: "Efl.Ui.Scroller";
3144 group "key_bindings" list {
3145 group "Elm_Config_Binding_Key" struct {
3146 value "context" int: 0;
3147 value "key" string: "Left";
3148 value "action" string: "move";
3149 value "params" string: "left";
3150 }
3151 group "Elm_Config_Binding_Key" struct {
3152 value "context" int: 0;
3153 value "key" string: "KP_Left";
3154 value "action" string: "move";
3155 value "params" string: "left";
3156 }
3157 group "Elm_Config_Binding_Key" struct {
3158 value "context" int: 0;
3159 value "key" string: "Right";
3160 value "action" string: "move";
3161 value "params" string: "right";
3162 }
3163 group "Elm_Config_Binding_Key" struct {
3164 value "context" int: 0;
3165 value "key" string: "KP_Right";
3166 value "action" string: "move";
3167 value "params" string: "right";
3168 }
3169 group "Elm_Config_Binding_Key" struct {
3170 value "context" int: 0;
3171 value "key" string: "Up";
3172 value "action" string: "move";
3173 value "params" string: "up";
3174 }
3175 group "Elm_Config_Binding_Key" struct {
3176 value "context" int: 0;
3177 value "key" string: "KP_Up";
3178 value "action" string: "move";
3179 value "params" string: "up";
3180 }
3181 group "Elm_Config_Binding_Key" struct {
3182 value "context" int: 0;
3183 value "key" string: "Down";
3184 value "action" string: "move";
3185 value "params" string: "down";
3186 }
3187 group "Elm_Config_Binding_Key" struct {
3188 value "context" int: 0;
3189 value "key" string: "KP_Down";
3190 value "action" string: "move";
3191 value "params" string: "down";
3192 }
3193 group "Elm_Config_Binding_Key" struct {
3194 value "context" int: 0;
3195 value "key" string: "Home";
3196 value "action" string: "move";
3197 value "params" string: "first";
3198 }
3199 group "Elm_Config_Binding_Key" struct {
3200 value "context" int: 0;
3201 value "key" string: "KP_Home";
3202 value "action" string: "move";
3203 value "params" string: "first";
3204 }
3205 group "Elm_Config_Binding_Key" struct {
3206 value "context" int: 0;
3207 value "key" string: "End";
3208 value "action" string: "move";
3209 value "params" string: "last";
3210 }
3211 group "Elm_Config_Binding_Key" struct {
3212 value "context" int: 0;
3213 value "key" string: "KP_End";
3214 value "action" string: "move";
3215 value "params" string: "last";
3216 }
3217 group "Elm_Config_Binding_Key" struct {
3218 value "context" int: 0;
3219 value "key" string: "Prior";
3220 value "action" string: "move";
3221 value "params" string: "prior";
3222 }
3223 group "Elm_Config_Binding_Key" struct {
3224 value "context" int: 0;
3225 value "key" string: "KP_Prior";
3226 value "action" string: "move";
3227 value "params" string: "prior";
3228 }
3229 group "Elm_Config_Binding_Key" struct {
3230 value "context" int: 0;
3231 value "key" string: "Next";
3232 value "action" string: "move";
3233 value "params" string: "next";
3234 }
3235 group "Elm_Config_Binding_Key" struct {
3236 value "context" int: 0;
3237 value "key" string: "KP_Next";
3238 value "action" string: "move";
3239 value "params" string: "next";
3240 }
3241 }
3242 }
3142 } 3243 }
3143} 3244}
diff --git a/data/elementary/config/standard/base.src.in b/data/elementary/config/standard/base.src.in
index bf9aaf4c24..ccfa97b05e 100644
--- a/data/elementary/config/standard/base.src.in
+++ b/data/elementary/config/standard/base.src.in
@@ -1,5 +1,5 @@
1group "Elm_Config" struct { 1group "Elm_Config" struct {
2 value "config_version" int: 131092; 2 value "config_version" int: 131093;
3 value "entry_select_allow" uchar: 1; 3 value "entry_select_allow" uchar: 1;
4 value "engine" string: ""; 4 value "engine" string: "";
5 value "vsync" uchar: 0; 5 value "vsync" uchar: 0;
@@ -3136,5 +3136,106 @@ group "Elm_Config" struct {
3136 } 3136 }
3137 } 3137 }
3138 } 3138 }
3139 group "Elm_Config_Bindings_Widget" struct {
3140 value "name" string: "Efl.Ui.Scroller";
3141 group "key_bindings" list {
3142 group "Elm_Config_Binding_Key" struct {
3143 value "context" int: 0;
3144 value "key" string: "Left";
3145 value "action" string: "move";
3146 value "params" string: "left";
3147 }
3148 group "Elm_Config_Binding_Key" struct {
3149 value "context" int: 0;
3150 value "key" string: "KP_Left";
3151 value "action" string: "move";
3152 value "params" string: "left";
3153 }
3154 group "Elm_Config_Binding_Key" struct {
3155 value "context" int: 0;
3156 value "key" string: "Right";
3157 value "action" string: "move";
3158 value "params" string: "right";
3159 }
3160 group "Elm_Config_Binding_Key" struct {
3161 value "context" int: 0;
3162 value "key" string: "KP_Right";
3163 value "action" string: "move";
3164 value "params" string: "right";
3165 }
3166 group "Elm_Config_Binding_Key" struct {
3167 value "context" int: 0;
3168 value "key" string: "Up";
3169 value "action" string: "move";
3170 value "params" string: "up";
3171 }
3172 group "Elm_Config_Binding_Key" struct {
3173 value "context" int: 0;
3174 value "key" string: "KP_Up";
3175 value "action" string: "move";
3176 value "params" string: "up";
3177 }
3178 group "Elm_Config_Binding_Key" struct {
3179 value "context" int: 0;
3180 value "key" string: "Down";
3181 value "action" string: "move";
3182 value "params" string: "down";
3183 }
3184 group "Elm_Config_Binding_Key" struct {
3185 value "context" int: 0;
3186 value "key" string: "KP_Down";
3187 value "action" string: "move";
3188 value "params" string: "down";
3189 }
3190 group "Elm_Config_Binding_Key" struct {
3191 value "context" int: 0;
3192 value "key" string: "Home";
3193 value "action" string: "move";
3194 value "params" string: "first";
3195 }
3196 group "Elm_Config_Binding_Key" struct {
3197 value "context" int: 0;
3198 value "key" string: "KP_Home";
3199 value "action" string: "move";
3200 value "params" string: "first";
3201 }
3202 group "Elm_Config_Binding_Key" struct {
3203 value "context" int: 0;
3204 value "key" string: "End";
3205 value "action" string: "move";
3206 value "params" string: "last";
3207 }
3208 group "Elm_Config_Binding_Key" struct {
3209 value "context" int: 0;
3210 value "key" string: "KP_End";
3211 value "action" string: "move";
3212 value "params" string: "last";
3213 }
3214 group "Elm_Config_Binding_Key" struct {
3215 value "context" int: 0;
3216 value "key" string: "Prior";
3217 value "action" string: "move";
3218 value "params" string: "prior";
3219 }
3220 group "Elm_Config_Binding_Key" struct {
3221 value "context" int: 0;
3222 value "key" string: "KP_Prior";
3223 value "action" string: "move";
3224 value "params" string: "prior";
3225 }
3226 group "Elm_Config_Binding_Key" struct {
3227 value "context" int: 0;
3228 value "key" string: "Next";
3229 value "action" string: "move";
3230 value "params" string: "next";
3231 }
3232 group "Elm_Config_Binding_Key" struct {
3233 value "context" int: 0;
3234 value "key" string: "KP_Next";
3235 value "action" string: "move";
3236 value "params" string: "next";
3237 }
3238 }
3239 }
3139 } 3240 }
3140} 3241}
diff --git a/src/lib/elementary/efl_ui_scroller.c b/src/lib/elementary/efl_ui_scroller.c
index a4f654555e..52af40be49 100644
--- a/src/lib/elementary/efl_ui_scroller.c
+++ b/src/lib/elementary/efl_ui_scroller.c
@@ -5,6 +5,7 @@
5#define ELM_LAYOUT_PROTECTED 5#define ELM_LAYOUT_PROTECTED
6#define EFL_UI_SCROLL_MANAGER_PROTECTED 6#define EFL_UI_SCROLL_MANAGER_PROTECTED
7#define EFL_UI_SCROLLBAR_PROTECTED 7#define EFL_UI_SCROLLBAR_PROTECTED
8#define EFL_UI_WIDGET_FOCUS_MANAGER_PROTECTED
8 9
9#include <Elementary.h> 10#include <Elementary.h>
10#include "elm_priv.h" 11#include "elm_priv.h"
@@ -27,6 +28,126 @@
27 o, evas_object_type_get(o)); \ 28 o, evas_object_type_get(o)); \
28 return __VA_ARGS__; \ 29 return __VA_ARGS__; \
29 } 30 }
31
32static Eina_Bool _key_action_move(Evas_Object *obj, const char *params);
33
34static const Elm_Action key_actions[] = {
35 {"move", _key_action_move},
36 {NULL, NULL}
37};
38
39static Eina_Bool
40_key_action_move(Eo *obj, const char *params)
41{
42 EFL_UI_SCROLLER_DATA_GET_OR_RETURN(obj, sd, EINA_FALSE);
43
44 const char *dir = params;
45 Efl_Ui_Focus_Direction focus_dir = 0;
46 Efl_Ui_Focus_Object *focused, *next_target;
47 Eina_Rect focused_geom, viewport;
48 Eina_Position2D pos;
49 Eina_Size2D max;
50 Eina_Bool scroller_adjustment = EINA_FALSE;
51
52 pos = efl_ui_scrollable_content_pos_get(obj);
53 viewport = efl_ui_scrollable_viewport_geometry_get(obj);
54 max = efl_gfx_entity_size_get(sd->content);
55 if (!strcmp(dir, "prior"))
56 focus_dir = EFL_UI_FOCUS_DIRECTION_PREVIOUS;
57 else if (!strcmp(dir, "next"))
58 focus_dir = EFL_UI_FOCUS_DIRECTION_NEXT;
59 else if (!strcmp(dir, "left"))
60 focus_dir = EFL_UI_FOCUS_DIRECTION_LEFT;
61 else if (!strcmp(dir, "right"))
62 focus_dir = EFL_UI_FOCUS_DIRECTION_RIGHT;
63 else if (!strcmp(dir, "up"))
64 focus_dir = EFL_UI_FOCUS_DIRECTION_UP;
65 else if (!strcmp(dir, "down"))
66 focus_dir = EFL_UI_FOCUS_DIRECTION_DOWN;
67 else return EINA_FALSE;
68
69 focused = efl_ui_focus_manager_focus_get(obj);
70 next_target = efl_ui_focus_manager_request_move(obj, focus_dir, focused, EINA_FALSE);
71
72 //logical movement is handled by focus directly
73 if (focused &&
74 (focus_dir == EFL_UI_FOCUS_DIRECTION_NEXT ||
75 focus_dir == EFL_UI_FOCUS_DIRECTION_PREVIOUS))
76 return EINA_FALSE;
77 //check if a object that is focused is lapping out of the viewport
78 // if this is the case, and the object is lapping out of the viewport in
79 // the direction we want to move, then move the scroller
80 if (focused)
81 {
82 Eina_Rectangle_Outside relative;
83
84 focused_geom = efl_gfx_entity_geometry_get(focused);
85
86 relative = eina_rectangle_outside_position(&viewport.rect, &focused_geom.rect);
87
88 //now precisly check if the direction is also lapping out
89 if ((focus_dir == EFL_UI_FOCUS_DIRECTION_UP && (relative & EINA_RECTANGLE_OUTSIDE_TOP)) ||
90 (focus_dir == EFL_UI_FOCUS_DIRECTION_LEFT && (relative & EINA_RECTANGLE_OUTSIDE_LEFT)) ||
91 (focus_dir == EFL_UI_FOCUS_DIRECTION_DOWN && (relative & EINA_RECTANGLE_OUTSIDE_BOTTOM)) ||
92 (focus_dir == EFL_UI_FOCUS_DIRECTION_RIGHT && (relative & EINA_RECTANGLE_OUTSIDE_RIGHT)))
93 {
94 scroller_adjustment = EINA_TRUE;
95 }
96 }
97 //check if there is a next target in the direction where we want to move
98 //if not, and the scroller is not at its max in that relation,
99 //then move the scroller instead of the focus
100 if (!next_target)
101 {
102 if ((focus_dir == EFL_UI_FOCUS_DIRECTION_UP && (pos.y != 0)) ||
103 (focus_dir == EFL_UI_FOCUS_DIRECTION_LEFT && (pos.x != 0)) ||
104 (focus_dir == EFL_UI_FOCUS_DIRECTION_DOWN && (pos.y != max.h)) ||
105 (focus_dir == EFL_UI_FOCUS_DIRECTION_RIGHT && (pos.x != max.w)))
106 {
107 scroller_adjustment = EINA_TRUE;
108 }
109 }
110 if (!scroller_adjustment)
111 return EINA_FALSE;
112
113 Eina_Position2D step = efl_ui_scrollable_step_size_get(obj);
114
115 if (!strcmp(dir, "left"))
116 {
117 if (pos.x <= 0) return EINA_FALSE;
118 pos.x -= step.x;
119 }
120 else if (!strcmp(dir, "right"))
121 {
122 if (pos.x >= (max.w - viewport.w)) return EINA_FALSE;
123 pos.x += step.x;
124 }
125 else if (!strcmp(dir, "up"))
126 {
127 if (pos.y <= 0) return EINA_FALSE;
128 pos.y -= step.y;
129 }
130 else if (!strcmp(dir, "down"))
131 {
132 if (pos.y >= (max.h - viewport.h)) return EINA_FALSE;
133 pos.y += step.y;
134 }
135 else if (!strcmp(dir, "first"))
136 {
137 pos.y = 0;
138 }
139 else if (!strcmp(dir, "last"))
140 {
141 pos.y = max.h - viewport.h;
142 }
143 else return EINA_FALSE;
144
145 efl_ui_scrollable_scroll(obj, EINA_RECT(pos.x, pos.y, viewport.w, viewport.h), EINA_FALSE);
146
147 return EINA_TRUE;
148}
149
150
30static void 151static void
31_efl_ui_scroller_content_del_cb(void *data, 152_efl_ui_scroller_content_del_cb(void *data,
32 const Efl_Event *event EINA_UNUSED) 153 const Efl_Event *event EINA_UNUSED)
@@ -406,6 +527,25 @@ _efl_ui_scroller_size_hint_changed_cb(void *data, const Efl_Event *ev EINA_UNUSE
406 elm_layout_sizing_eval(data); 527 elm_layout_sizing_eval(data);
407} 528}
408 529
530static void
531_focused_element(void *data, const Efl_Event *event)
532{
533 Eina_Rect geom;
534 Efl_Ui_Focus_Object *obj = data;
535 Efl_Ui_Focus_Object *focus = efl_ui_focus_manager_focus_get(event->object);
536 Eina_Position2D pos, pan;
537
538 if (!focus) return;
539
540 geom = efl_ui_focus_object_focus_geometry_get(focus);
541 pos = efl_gfx_entity_position_get(obj);
542 pan = efl_ui_scrollable_content_pos_get(obj);
543 geom.x += pan.x - pos.x;
544 geom.y += pan.y - pos.y;
545
546 efl_ui_scrollable_scroll(obj, geom, EINA_TRUE);
547}
548
409EOLIAN static Eo * 549EOLIAN static Eo *
410_efl_ui_scroller_efl_object_constructor(Eo *obj, 550_efl_ui_scroller_efl_object_constructor(Eo *obj,
411 Efl_Ui_Scroller_Data *sd EINA_UNUSED) 551 Efl_Ui_Scroller_Data *sd EINA_UNUSED)
@@ -434,6 +574,8 @@ _efl_ui_scroller_efl_object_finalize(Eo *obj,
434 efl_ui_scroll_manager_pan_set(sd->smanager, sd->pan_obj); 574 efl_ui_scroll_manager_pan_set(sd->smanager, sd->pan_obj);
435 edje_object_part_swallow(wd->resize_obj, "efl.content", sd->pan_obj); 575 edje_object_part_swallow(wd->resize_obj, "efl.content", sd->pan_obj);
436 576
577 elm_widget_can_focus_set(obj, EINA_TRUE);
578
437 _scroll_edje_object_attach(obj); 579 _scroll_edje_object_attach(obj);
438 580
439 efl_event_callback_add(obj, EFL_UI_SCROLLBAR_EVENT_BAR_SIZE_CHANGED, 581 efl_event_callback_add(obj, EFL_UI_SCROLLBAR_EVENT_BAR_SIZE_CHANGED,
@@ -451,6 +593,7 @@ _efl_ui_scroller_efl_object_finalize(Eo *obj,
451 efl_event_callback_add(sd->pan_obj, EFL_GFX_ENTITY_EVENT_SIZE_CHANGED, 593 efl_event_callback_add(sd->pan_obj, EFL_GFX_ENTITY_EVENT_SIZE_CHANGED,
452 _efl_ui_scroller_pan_resized_cb, obj); 594 _efl_ui_scroller_pan_resized_cb, obj);
453 595
596 efl_event_callback_add(obj, EFL_UI_FOCUS_MANAGER_EVENT_MANAGER_FOCUS_CHANGED, _focused_element, obj);
454 return obj; 597 return obj;
455} 598}
456 599
@@ -563,6 +706,28 @@ _efl_ui_scroller_efl_ui_scrollable_interactive_match_content_set(Eo *obj EINA_UN
563 elm_layout_sizing_eval(obj); 706 elm_layout_sizing_eval(obj);
564} 707}
565 708
709EOLIAN static Eina_Bool
710_efl_ui_scroller_efl_ui_widget_focus_state_apply(Eo *obj, Efl_Ui_Scroller_Data *pd EINA_UNUSED, Efl_Ui_Widget_Focus_State current_state, Efl_Ui_Widget_Focus_State *configured_state, Efl_Ui_Widget *redirect EINA_UNUSED)
711{
712 //undepended from logical or not we always reigster as full with ourself as redirect
713 configured_state->logical = EINA_TRUE;
714 return efl_ui_widget_focus_state_apply(efl_super(obj, MY_CLASS), current_state, configured_state, obj);
715}
716
717EOLIAN static Efl_Ui_Focus_Manager*
718_efl_ui_scroller_efl_ui_widget_focus_manager_focus_manager_create(Eo *obj, Efl_Ui_Scroller_Data *pd EINA_UNUSED, Efl_Ui_Focus_Object *root)
719{
720 Efl_Ui_Focus_Manager *manager;
721 manager = efl_add(EFL_UI_FOCUS_MANAGER_ROOT_FOCUS_CLASS, obj,
722 efl_ui_focus_manager_root_set(efl_added, root));
723
724 return manager;
725}
726
727/* Standard widget overrides */
728
729ELM_WIDGET_KEY_DOWN_DEFAULT_IMPLEMENT(efl_ui_scroller, Efl_Ui_Scroller_Data)
730
566/* Internal EO APIs and hidden overrides */ 731/* Internal EO APIs and hidden overrides */
567 732
568#define EFL_UI_SCROLLER_EXTRA_OPS \ 733#define EFL_UI_SCROLLER_EXTRA_OPS \
diff --git a/src/lib/elementary/efl_ui_scroller.eo b/src/lib/elementary/efl_ui_scroller.eo
index bb9d998640..76447ab7d5 100644
--- a/src/lib/elementary/efl_ui_scroller.eo
+++ b/src/lib/elementary/efl_ui_scroller.eo
@@ -1,6 +1,8 @@
1class @beta Efl.Ui.Scroller extends Efl.Ui.Layout implements 1class @beta Efl.Ui.Scroller extends Efl.Ui.Layout implements
2 Efl.Ui.Scrollable_Interactive, 2 Efl.Ui.Scrollable_Interactive,
3 Efl.Ui.Scrollbar, 3 Efl.Ui.Scrollbar,
4 Efl.Ui.Focus.Manager_Sub,
5 Efl.Ui.Widget_Focus_Manager,
4 Efl.Content 6 Efl.Content
5{ 7{
6 [[Efl ui scroller class]] 8 [[Efl ui scroller class]]
@@ -11,6 +13,9 @@ class @beta Efl.Ui.Scroller extends Efl.Ui.Layout implements
11 Efl.Content.content { get; set; } 13 Efl.Content.content { get; set; }
12 Efl.Content.content_unset; 14 Efl.Content.content_unset;
13 Efl.Ui.Widget.theme_apply; 15 Efl.Ui.Widget.theme_apply;
16 Efl.Ui.Widget.focus_state_apply;
17 Efl.Ui.Widget.widget_event;
18 Efl.Ui.Widget_Focus_Manager.focus_manager_create;
14 Efl.Ui.Scrollable_Interactive.match_content { set; } 19 Efl.Ui.Scrollable_Interactive.match_content { set; }
15 } 20 }
16 composite { 21 composite {
diff --git a/src/lib/elementary/elm_priv.h b/src/lib/elementary/elm_priv.h
index 1ac0bfed07..780b20a746 100644
--- a/src/lib/elementary/elm_priv.h
+++ b/src/lib/elementary/elm_priv.h
@@ -177,7 +177,7 @@ struct _Efl_Ui_Theme_Data
177 * the users config doesn't need to be wiped - simply new values need 177 * the users config doesn't need to be wiped - simply new values need
178 * to be put in 178 * to be put in
179 */ 179 */
180# define ELM_CONFIG_FILE_GENERATION 0x0014 180# define ELM_CONFIG_FILE_GENERATION 0x0015
181# define ELM_CONFIG_VERSION_EPOCH_OFFSET 16 181# define ELM_CONFIG_VERSION_EPOCH_OFFSET 16
182# define ELM_CONFIG_VERSION ((ELM_CONFIG_EPOCH << ELM_CONFIG_VERSION_EPOCH_OFFSET) | \ 182# define ELM_CONFIG_VERSION ((ELM_CONFIG_EPOCH << ELM_CONFIG_VERSION_EPOCH_OFFSET) | \
183 ELM_CONFIG_FILE_GENERATION) 183 ELM_CONFIG_FILE_GENERATION)