summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Hollerbach <marcel-hollerbach@t-online.de>2016-12-20 18:21:58 +0100
committerMarcel Hollerbach <marcel-hollerbach@t-online.de>2017-04-19 13:32:00 +0200
commitd183b2907ec24510d500b62d44fab162ca40e20c (patch)
tree84672e7435cf93ebeb088a89aa6b5a7278c8a6b4
parentec6d359d40502f2f31388b2e093c40389135b554 (diff)
downloadefl-d183b2907ec24510d500b62d44fab162ca40e20c.tar.gz
elm_interface_scrollable: fix bringing in of items
-rw-r--r--src/lib/elementary/efl_ui_focus_manager.c1
-rw-r--r--src/lib/elementary/efl_ui_focus_manager.eo1
-rw-r--r--src/lib/elementary/elm_interface_scrollable.c28
-rw-r--r--src/lib/elementary/elm_interface_scrollable.eo1
4 files changed, 30 insertions, 1 deletions
diff --git a/src/lib/elementary/efl_ui_focus_manager.c b/src/lib/elementary/efl_ui_focus_manager.c
index 87afd28d07..3ec1c7a5d0 100644
--- a/src/lib/elementary/efl_ui_focus_manager.c
+++ b/src/lib/elementary/efl_ui_focus_manager.c
@@ -1132,6 +1132,7 @@ _efl_ui_focus_manager_focus(Eo *obj, Efl_Ui_Focus_Manager_Data *pd, Efl_Ui_Focus
//populate the new change
if (old_focus) efl_ui_focus_object_focus_set(old_focus->focusable, EINA_FALSE);
efl_ui_focus_object_focus_set(node->focusable, EINA_TRUE);
+ efl_event_callback_call(obj, EFL_UI_FOCUS_MANAGER_EVENT_FOCUSED, node->focusable);
}
else if (node->redirect_manager)
{
diff --git a/src/lib/elementary/efl_ui_focus_manager.eo b/src/lib/elementary/efl_ui_focus_manager.eo
index 9f8565954d..dd13e71c89 100644
--- a/src/lib/elementary/efl_ui_focus_manager.eo
+++ b/src/lib/elementary/efl_ui_focus_manager.eo
@@ -176,5 +176,6 @@ class Efl.Ui.Focus.Manager (Efl.Object) {
redirect,changed : Efl.Ui.Focus.Manager; [[Emitted when the redirect object has changed, the old manager is passed as event info]]
pre,flush; [[Emitted once the graph calculationg will be performed]]
coords,dirty; [[Emitted once the graph is dirty, this means there are potential changes in border_elements you want to know about]]
+ focused : Efl.Ui.Focus.Object; [[Emitted if the manager has focused a object]]
}
} \ No newline at end of file
diff --git a/src/lib/elementary/elm_interface_scrollable.c b/src/lib/elementary/elm_interface_scrollable.c
index a5c9854e96..e92d7df23e 100644
--- a/src/lib/elementary/elm_interface_scrollable.c
+++ b/src/lib/elementary/elm_interface_scrollable.c
@@ -4632,6 +4632,28 @@ _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) {}
+static void
+_focused_element(void *data, const Efl_Event *event)
+{
+ Eina_Rectangle geom;
+ Eina_Rectangle obj_geom;
+ Efl_Ui_Focus_Object *obj = data;
+ Efl_Ui_Focus_Object *focus = event->info;
+ Elm_Scrollable_Smart_Interface_Data *pd;
+
+ pd = efl_data_scope_get(obj, MY_SCROLLABLE_INTERFACE);
+
+ 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);
+}
+
EOLIAN static Efl_Object*
_elm_interface_scrollable_efl_object_constructor(Eo *obj, Elm_Scrollable_Smart_Interface_Data *pd EINA_UNUSED)
{
@@ -4640,6 +4662,12 @@ _elm_interface_scrollable_efl_object_constructor(Eo *obj, Elm_Scrollable_Smart_I
efl_composite_attach(obj, pd->manager);
+ efl_event_callback_forwarder_add(pd->manager, EFL_UI_FOCUS_MANAGER_EVENT_REDIRECT_CHANGED, obj);
+ efl_event_callback_forwarder_add(pd->manager, EFL_UI_FOCUS_MANAGER_EVENT_PRE_FLUSH , obj);
+ efl_event_callback_forwarder_add(pd->manager, EFL_UI_FOCUS_MANAGER_EVENT_COORDS_DIRTY , obj);
+ efl_event_callback_forwarder_add(pd->manager, EFL_UI_FOCUS_MANAGER_EVENT_FOCUSED, obj);
+ efl_event_callback_add(pd->manager, EFL_UI_FOCUS_MANAGER_EVENT_FOCUSED, _focused_element, obj);
+
return efl_constructor(efl_super(obj, MY_SCROLLABLE_INTERFACE));
}
diff --git a/src/lib/elementary/elm_interface_scrollable.eo b/src/lib/elementary/elm_interface_scrollable.eo
index 3aff179a91..ec8a76cbc4 100644
--- a/src/lib/elementary/elm_interface_scrollable.eo
+++ b/src/lib/elementary/elm_interface_scrollable.eo
@@ -683,7 +683,6 @@ mixin Elm.Interface_Scrollable(Efl.Ui.Scrollable, Efl.Canvas.Group, Efl.Ui.Focus
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]]