cedric pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=99288a9e35f9ea2dec5aa63d43ec996dd4e976c5
commit 99288a9e35f9ea2dec5aa63d43ec996dd4e976c5 Author: chris <ch...@indefini.org> Date: Wed Nov 4 16:16:11 2015 -0800 autoscroll focus: pass the object region position relative to the scroller. Summary: The region position passed to region_show and region_bring_in used to be relative to the object position, not the scroller. This fixes T1686. @fix Reviewers: seoz Maniphest Tasks: T1686 Differential Revision: https://phab.enlightenment.org/D3168 Signed-off-by: Cedric BAIL <ced...@osg.samsung.com> --- src/lib/elm_widget.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c index 832ea1e..c850e46 100644 --- a/src/lib/elm_widget.c +++ b/src/lib/elm_widget.c @@ -762,22 +762,30 @@ _elm_widget_focus_region_show(const Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNU while (o) { Evas_Coord px, py; + evas_object_geometry_get(o, &px, &py, NULL, NULL); if (_elm_scrollable_is(o) && !elm_widget_disabled_get(o)) { + Evas_Coord sx, sy; + eo_do(o, elm_interface_scrollable_content_region_get(&sx, &sy, NULL, NULL)); + + // Get the object's on_focus_region position relative to the scroller. + Evas_Coord rx, ry; + rx = ox + x - px + sx; + ry = oy + y - py + sy; + 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)); + eo_do(o, elm_interface_scrollable_content_region_show(rx, ry, w, h)); break; case ELM_FOCUS_AUTOSCROLL_MODE_BRING_IN: - eo_do(o, elm_interface_scrollable_region_bring_in(x, y, w, h)); + eo_do(o, elm_interface_scrollable_region_bring_in(rx, ry, w, h)); break; default: break; } - if (!elm_widget_focus_region_get(o, &x, &y, &w, &h)) { o = elm_widget_parent_get(o); @@ -786,7 +794,6 @@ _elm_widget_focus_region_show(const Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNU } else { - evas_object_geometry_get(o, &px, &py, NULL, NULL); x += ox - px; y += oy - py; ox = px; --