bu5hm4n pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=44e40c7c5e4549e78008eb7b74b6ab1b7e1fcf9d

commit 44e40c7c5e4549e78008eb7b74b6ab1b7e1fcf9d
Author: Marcel Hollerbach <[email protected]>
Date:   Tue Dec 20 17:25:57 2016 +0100

    elm_interface_scrollable: use the submanager to register the children
    
    this adds the registered elements at the broder of the scrollable to the
    parents manager. scroller and gengrid works for registering
---
 src/lib/elementary/elm_interface_scrollable.c  | 53 ++++++++++++++++++++++++++
 src/lib/elementary/elm_interface_scrollable.eo |  5 ++-
 src/lib/elementary/elm_interface_scrollable.h  |  2 +
 3 files changed, 59 insertions(+), 1 deletion(-)

diff --git a/src/lib/elementary/elm_interface_scrollable.c 
b/src/lib/elementary/elm_interface_scrollable.c
index 249803f..a5c9854 100644
--- a/src/lib/elementary/elm_interface_scrollable.c
+++ b/src/lib/elementary/elm_interface_scrollable.c
@@ -4623,6 +4623,7 @@ _elm_interface_scrollable_class_constructor(Efl_Class 
*klass)
    evas_smart_legacy_type_register(MY_SCROLLABLE_INTERFACE_NAME_LEGACY, klass);
 }
 
+
 /* Legacy ABI compatibility - APIs never worked and were hidden behind
  * EFL_EO_API_SUPPORT (from elm_interface.h) or inside internal headers.
  * Removed between 1.18 and 1.19. The symbols are kept purely for ABI
@@ -4631,5 +4632,57 @@ _elm_interface_scrollable_class_constructor(Efl_Class 
*klass)
 EAPI void elm_pan_gravity_set(Elm_Pan *obj EINA_UNUSED, double x EINA_UNUSED, 
double y EINA_UNUSED) {}
 EAPI void elm_pan_gravity_get(const Elm_Pan *obj EINA_UNUSED, double *x 
EINA_UNUSED, double *y EINA_UNUSED) {}
 
+EOLIAN static Efl_Object*
+_elm_interface_scrollable_efl_object_constructor(Eo *obj, 
Elm_Scrollable_Smart_Interface_Data *pd EINA_UNUSED)
+{
+   pd->manager = efl_add(EFL_UI_FOCUS_MANAGER_SUB_CLASS, obj,
+    efl_ui_focus_manager_root_set(efl_added, obj));
+
+   efl_composite_attach(obj, pd->manager);
+
+   return efl_constructor(efl_super(obj, MY_SCROLLABLE_INTERFACE));
+}
+
+static Eina_Bool
+_filter_cb(const void *iterator EINA_UNUSED, void *data, void *fdata)
+{
+   Eina_Rectangle geom;
+
+   evas_object_geometry_get(data, &geom.x, &geom.y, &geom.w, &geom.h);
+
+   return eina_rectangles_intersect(&geom, fdata);
+}
+
+EOLIAN static Eina_Iterator*
+_elm_interface_scrollable_efl_ui_focus_manager_border_elements_get(Eo *obj, 
Elm_Scrollable_Smart_Interface_Data *pd EINA_UNUSED)
+{
+   Eina_Iterator *border_elements;
+   Eina_Rectangle *rect = calloc(1, sizeof(Eina_Rectangle));
+
+   border_elements = efl_ui_focus_manager_border_elements_get(efl_super(obj, 
MY_SCROLLABLE_INTERFACE));
+   elm_interface_scrollable_content_viewport_geometry_get(obj, &rect->x, 
&rect->y, &rect->w, &rect->h);
+
+   return eina_iterator_filter_new(border_elements, _filter_cb, free, rect);
+}
+
+EOLIAN static void
+_elm_interface_scrollable_efl_ui_focus_manager_focus(Eo *obj, 
Elm_Scrollable_Smart_Interface_Data *pd EINA_UNUSED, Efl_Ui_Focus_Object *focus)
+{
+   Eina_Rectangle geom;
+   Eina_Rectangle obj_geom;
+
+   efl_ui_focus_manager_focus(efl_super(obj, MY_SCROLLABLE_INTERFACE), focus);
+
+   if (!focus) return;
+
+   evas_object_geometry_get(focus, &geom.x, &geom.y, &geom.w, &geom.h);
+   evas_object_geometry_get(pd->content, &obj_geom.x, &obj_geom.y, 
&obj_geom.w, &obj_geom.h);
+
+   geom.x = geom.x - obj_geom.x;
+   geom.y = geom.y - obj_geom.y;
+
+   elm_interface_scrollable_region_bring_in(obj, geom.x, geom.y, geom.w, 
geom.h);
+}
+
 #include "elm_interface_scrollable.eo.c"
 #include "elm_pan.eo.c"
diff --git a/src/lib/elementary/elm_interface_scrollable.eo 
b/src/lib/elementary/elm_interface_scrollable.eo
index 2187c6f..3aff179 100644
--- a/src/lib/elementary/elm_interface_scrollable.eo
+++ b/src/lib/elementary/elm_interface_scrollable.eo
@@ -42,7 +42,7 @@ enum Elm.Scroller.Movement_Block
 }
 
 
-mixin Elm.Interface_Scrollable(Efl.Ui.Scrollable, Efl.Canvas.Group)
+mixin Elm.Interface_Scrollable(Efl.Ui.Scrollable, Efl.Canvas.Group, 
Efl.Ui.Focus.Manager)
 {
    [[Elm scrollable mixin]]
    eo_prefix: elm_interface_scrollable;
@@ -679,8 +679,11 @@ mixin Elm.Interface_Scrollable(Efl.Ui.Scrollable, 
Efl.Canvas.Group)
    }
    implements {
       class.constructor;
+      Efl.Object.constructor;
       Efl.Canvas.Group.group_add;
       Efl.Canvas.Group.group_del;
+      Efl.Ui.Focus.Manager.border_elements.get;
+      Efl.Ui.Focus.Manager.focus;
    }
    events {
       changed; [[Called when content changed]]
diff --git a/src/lib/elementary/elm_interface_scrollable.h 
b/src/lib/elementary/elm_interface_scrollable.h
index 25245ec..385cd5e 100644
--- a/src/lib/elementary/elm_interface_scrollable.h
+++ b/src/lib/elementary/elm_interface_scrollable.h
@@ -237,6 +237,8 @@ struct _Elm_Scrollable_Smart_Interface_Data
    Eina_Bool  go_down : 1;
    Eina_Bool  loop_h : 1;
    Eina_Bool  loop_v : 1;
+
+   Efl_Ui_Focus_Manager *manager;
 };
 
 #define ELM_SCROLLABLE_CHECK(obj, ...)                                       \

-- 


Reply via email to