cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=790843117800171d08c667f65f0256c9a5499392

commit 790843117800171d08c667f65f0256c9a5499392
Author: soohye <soohye.s...@samsung.com>
Date:   Wed Jun 22 16:55:07 2016 -0700

    elementary/scroller: fix to skip focus for unfocusable scroller
    
    Summary:
    There is a issue about passing the focus to unfocusable scroller.
    To prevent the issue, check the status of focusable object and child object
    before passing the focus.
    
    Test Plan:
    {F38439}
    
    I changed the test file.
    The problem occured as below.
    
    1. click button
    2. show popup
    3. click cancel button in popup
    4. lost the focus
    
    Reviewers: Hermet, raster, cedric
    
    Reviewed By: cedric
    
    Subscribers: minkyu, sju27, cedric, jpeg
    
    Differential Revision: https://phab.enlightenment.org/D4056
    
    Signed-off-by: Cedric BAIL <ced...@osg.samsung.com>
---
 src/bin/elementary/test.c          |   2 +
 src/bin/elementary/test_scroller.c | 100 +++++++++++++++++++++++++++++++++++++
 src/lib/elementary/elm_scroller.c  |   4 ++
 3 files changed, 106 insertions(+)

diff --git a/src/bin/elementary/test.c b/src/bin/elementary/test.c
index 78609fd..c9c2596 100644
--- a/src/bin/elementary/test.c
+++ b/src/bin/elementary/test.c
@@ -165,6 +165,7 @@ void test_scroller(void *data, Evas_Object *obj, void 
*event_info);
 void test_scroller2(void *data, Evas_Object *obj, void *event_info);
 void test_scroller3(void *data, Evas_Object *obj, void *event_info);
 void test_scroller4(void *data, Evas_Object *obj, void *event_info);
+void test_scroller5(void *data, Evas_Object *obj, void *event_info);
 void test_spinner(void *data, Evas_Object *obj, void *event_info);
 void test_index(void *data, Evas_Object *obj, void *event_info);
 void test_index2(void *data, Evas_Object *obj, void *event_info);
@@ -803,6 +804,7 @@ add_tests:
    ADD_TEST(NULL, "Scroller", "Scroller 2", test_scroller2);
    ADD_TEST(NULL, "Scroller", "Scroller 3", test_scroller3);
    ADD_TEST(NULL, "Scroller", "Page Scroller", test_scroller4);
+   ADD_TEST(NULL, "Scroller", "Scroller on Popup", test_scroller5);
 
    //------------------------------//
    // FIXME: add frame test
diff --git a/src/bin/elementary/test_scroller.c 
b/src/bin/elementary/test_scroller.c
index eb00f25..2221f80 100644
--- a/src/bin/elementary/test_scroller.c
+++ b/src/bin/elementary/test_scroller.c
@@ -728,3 +728,103 @@ test_scroller4(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event
    evas_object_resize(win, 400, 550);
    evas_object_show(win);
 }
+
+static void
+_popup_btn_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void 
*event_info EINA_UNUSED)
+{
+   evas_object_del(data);
+}
+
+static void
+_block_clicked_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info 
EINA_UNUSED)
+{
+   evas_object_del(obj);
+}
+
+static void
+_btn_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info 
EINA_UNUSED)
+{
+   Evas_Object *win = data;
+   Evas_Object *popup, *scr, *lbl, *btn, *rect, *tbl;
+
+   popup = elm_popup_add(win);
+   elm_object_part_text_set(popup, "title,text", "Scroller on Popup");
+   evas_object_smart_callback_add(popup, "block,clicked",
+                                  _block_clicked_cb, NULL);
+
+   tbl = elm_table_add(popup);
+   elm_object_content_set(popup, tbl);
+   evas_object_show(tbl);
+
+   rect = evas_object_rectangle_add(evas_object_evas_get(popup));
+   evas_object_size_hint_min_set(rect, 200, 50);
+   elm_table_pack(tbl, rect, 0, 0, 1, 1);
+
+   scr = elm_scroller_add(popup);
+   elm_object_focus_allow_set(scr, EINA_FALSE);
+   evas_object_size_hint_weight_set(scr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(scr, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(scr);
+
+   lbl = elm_label_add(scr);
+   elm_object_text_set(lbl,
+                       "Do you want close the popup?<br>"
+                       "Please select cancel button<br><br>"
+                       "Do you wnat close the popup?<br>"
+                       "Please select cancel button");
+   evas_object_size_hint_weight_set(lbl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(lbl, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_object_content_set(scr, lbl);
+   evas_object_show(lbl);
+
+   elm_table_pack(tbl, scr, 0, 0, 1, 1);
+
+   btn = elm_button_add(popup);
+   elm_object_text_set(btn, "Cancel");
+   elm_object_part_content_set(popup, "button1", btn);
+   evas_object_smart_callback_add(btn, "clicked", _popup_btn_clicked_cb, 
popup);
+   evas_object_show(btn);
+
+   evas_object_show(popup);
+   elm_object_focus_set(btn, EINA_TRUE);
+}
+
+static void
+_focused_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void 
*event_info EINA_UNUSED)
+{
+   printf("focused");
+}
+
+void
+test_scroller5(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void 
*event_info EINA_UNUSED)
+{
+   Evas_Object *win, *bx, *btn;
+
+   win = elm_win_util_standard_add("Scroller on Popup", "Scroller on Popup");
+   elm_win_autodel_set(win, EINA_TRUE);
+   elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
+
+   bx = elm_box_add(win);
+   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, bx);
+   evas_object_show(bx);
+
+   btn = elm_button_add(bx);
+   elm_object_text_set(btn, "Button 1");
+   evas_object_smart_callback_add(btn, "clicked", _btn_clicked_cb, win);
+   evas_object_smart_callback_add(btn, "focused", _focused_cb, NULL);
+   elm_box_pack_end(bx, btn);
+   evas_object_show(btn);
+
+   btn = elm_button_add(bx);
+   elm_object_text_set(btn, "Button 2");
+   evas_object_smart_callback_add(btn, "clicked", _btn_clicked_cb, win);
+   evas_object_smart_callback_add(btn, "focused", _focused_cb, NULL);
+   elm_box_pack_end(bx, btn);
+   evas_object_show(btn);
+
+   elm_object_focus_set(btn, EINA_TRUE);
+
+   evas_object_resize(win, 400, 550);
+   evas_object_show(win);
+}
diff --git a/src/lib/elementary/elm_scroller.c 
b/src/lib/elementary/elm_scroller.c
index 7f03561..4ce4c63 100644
--- a/src/lib/elementary/elm_scroller.c
+++ b/src/lib/elementary/elm_scroller.c
@@ -450,6 +450,10 @@ _elm_scroller_elm_widget_focus_next(Eo *obj EINA_UNUSED, 
Elm_Scroller_Data *sd,
           return ret;
      }
 
+   if (!(elm_widget_can_focus_get(obj)) &&
+       !(elm_widget_can_focus_get(cur)))
+      return EINA_FALSE;
+
    /* Return */
    *next = (Evas_Object *)obj;
 

-- 


Reply via email to