diff options
author | Marcel Hollerbach <marcel-hollerbach@t-online.de> | 2016-12-20 18:21:58 +0100 |
---|---|---|
committer | Marcel Hollerbach <marcel-hollerbach@t-online.de> | 2017-04-19 13:32:00 +0200 |
commit | d183b2907ec24510d500b62d44fab162ca40e20c (patch) | |
tree | 84672e7435cf93ebeb088a89aa6b5a7278c8a6b4 | |
parent | ec6d359d40502f2f31388b2e093c40389135b554 (diff) | |
download | efl-d183b2907ec24510d500b62d44fab162ca40e20c.tar.gz |
elm_interface_scrollable: fix bringing in of items
-rw-r--r-- | src/lib/elementary/efl_ui_focus_manager.c | 1 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_focus_manager.eo | 1 | ||||
-rw-r--r-- | src/lib/elementary/elm_interface_scrollable.c | 28 | ||||
-rw-r--r-- | src/lib/elementary/elm_interface_scrollable.eo | 1 |
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]] |