From 1adb1962de0d9ca64cf34c3ae56245ae654b54d1 Mon Sep 17 00:00:00 2001 From: Umesh Tanwar Date: Fri, 18 Mar 2016 11:56:59 -0700 Subject: [PATCH] elm_widget: update child object focus_order. Summary: _parent_focus() when called recursively updates the sd->focus_order for parent obeject only. The sibling's sd->focus_order not get updated. So updated the focus_order for siblings. Signed-off-by: Umesh Tanwar Test Plan: {F30149} correct case: 1. Press Enter key on click button. A popoup will come. 2. Pressing enter key on popup button the popup hides and focus goes back to click button. issue case: 1. Press Enter key on click button. A popoup will come. 2. press Alt+tab twice. 3. Pressing enter key on popup button the popup hides and focus does not go back to click button. Reviewers: raster, cedric Subscribers: singh.amitesh Differential Revision: https://phab.enlightenment.org/D3807 --- legacy/elementary/src/lib/elm_widget.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/legacy/elementary/src/lib/elm_widget.c b/legacy/elementary/src/lib/elm_widget.c index b110f32..4121519 100644 --- a/legacy/elementary/src/lib/elm_widget.c +++ b/legacy/elementary/src/lib/elm_widget.c @@ -792,6 +792,27 @@ _elm_widget_focus_highlight_style_get(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data } static void +_child_focus_order_update(Evas_Object* parent, Evas_Object* obj) +{ + const Eina_List *l; + Evas_Object *child; + ELM_WIDGET_DATA_GET(parent, sdp); + EINA_LIST_FOREACH(sdp->subobjs, l, child) + { + if (!_elm_widget_is(child) || (child == obj)) continue; + ELM_WIDGET_DATA_GET(child,sdc); + + if(sdc->can_focus || (sdc->child_can_focus)) + { + focus_order++; + sdc->focus_order = focus_order; + } + _child_focus_order_update(child, NULL); + } + +} + +static void _parent_focus(Evas_Object *obj, Elm_Object_Item *item) { API_ENTRY return; @@ -820,6 +841,8 @@ _parent_focus(Evas_Object *obj, Elm_Object_Item *item) if (_elm_config->access_mode == ELM_ACCESS_MODE_ON) _elm_access_highlight_set(obj); + + if (o) _child_focus_order_update(o, obj); } static void -- 2.7.4