raster pushed a commit to branch master.

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

commit f20f4c6e50d1535a2cefe81bbe90d78f0fc5a9a3
Author: Jiwon Kim <jwkim0...@gmail.com>
Date:   Thu May 26 17:19:34 2016 +0900

    Elm entry: fix returning wrong focus region
    
    Summary:
    In on_focus_region function,
    entry returns relative x,y position from edje object.
    It should be calculated from elm object's position.
    
    @fix
    
    Test Plan:
    1. $elementary_test "Entry on Page Scroll"
    2. click under button
    3. click upper text in entry
    4. page should not be scrolled
    
    Reviewers: tasn, cedric, woohyun, Hermet, herdsman, raster
    
    Subscribers: Blackmole, id213sin, cedric, jpeg
    
    Differential Revision: https://phab.enlightenment.org/D3923
---
 data/elementary/objects/test.edc | 21 ++++++++++-
 src/bin/elementary/test.c        |  2 ++
 src/bin/elementary/test_entry.c  | 76 ++++++++++++++++++++++++++++++++++++++++
 src/lib/elementary/elm_entry.c   |  9 +++++
 4 files changed, 107 insertions(+), 1 deletion(-)

diff --git a/data/elementary/objects/test.edc b/data/elementary/objects/test.edc
index 84407e5..3b665e1 100644
--- a/data/elementary/objects/test.edc
+++ b/data/elementary/objects/test.edc
@@ -784,6 +784,25 @@ group { name: "page_layout";
            }
          }
       }
+      part { name: "element1";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+           rel1.relative: 0.4 0.2;
+           rel1.to:"bg";
+           rel2.relative: 0.6 0.4;
+           rel2.to:"bg";
+         }
+      }
+      part { name: "element2";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+           rel1.relative: 0.4 0.6;
+           rel1.to:"bg";
+           rel2.relative: 0.6 0.8;
+           rel2.to:"bg";
+         }
+      }
    }
-
 }
diff --git a/src/bin/elementary/test.c b/src/bin/elementary/test.c
index de8e6d3..fff22fe 100644
--- a/src/bin/elementary/test.c
+++ b/src/bin/elementary/test.c
@@ -61,6 +61,7 @@ void test_entry(void *data, Evas_Object *obj, void 
*event_info);
 void test_entry_style_user(void *data, Evas_Object *obj, void *event_info);
 void test_entry_style_default(void *data, Evas_Object *obj, void *event_info);
 void test_entry_scrolled(void *data, Evas_Object *obj, void *event_info);
+void test_entry_on_page_scroll(void *data, Evas_Object *obj, void *event_info);
 void test_entry3(void *data, Evas_Object *obj, void *event_info);
 void test_entry4(void *data, Evas_Object *obj, void *event_info);
 void test_entry5(void *data, Evas_Object *obj, void *event_info);
@@ -603,6 +604,7 @@ add_tests:
    ADD_TEST(NULL, "Entries", "Entry Style Default", test_entry_style_default);
    ADD_TEST(NULL, "Entries", "Entry Style User", test_entry_style_user);
    ADD_TEST(NULL, "Entries", "Entry Scrolled", test_entry_scrolled);
+   ADD_TEST(NULL, "Entries", "Entry on Page Scroll", 
test_entry_on_page_scroll);
    ADD_TEST(NULL, "Entries", "Entry 3", test_entry3);
    ADD_TEST(NULL, "Entries", "Entry 4", test_entry4);
    ADD_TEST(NULL, "Entries", "Entry 5", test_entry5);
diff --git a/src/bin/elementary/test_entry.c b/src/bin/elementary/test_entry.c
index c295cc3..8ea2aa5 100644
--- a/src/bin/elementary/test_entry.c
+++ b/src/bin/elementary/test_entry.c
@@ -686,6 +686,82 @@ test_entry_scrolled(void *data EINA_UNUSED, Evas_Object 
*obj EINA_UNUSED, void *
 }
 
 static void
+my_en_bt_clr(void *data, Evas_Object *obj EINA_UNUSED, void *event_info 
EINA_UNUSED)
+{
+   Evas_Object *en = data;
+   elm_entry_cursor_end_set(en);
+}
+
+void
+test_entry_on_page_scroll(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+   Evas_Object *win, *sc, *bx, *ly, *rect, *en, *btn, *lb;
+   char buf[PATH_MAX];
+
+   win = elm_win_util_standard_add("entry-on-page-scroll", "Entry on Page 
Scroll");
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   sc = elm_scroller_add(win);
+   evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_scroller_page_relative_set(sc, 1.0, 0.0);
+   elm_scroller_policy_set(sc, ELM_SCROLLER_POLICY_OFF, 
ELM_SCROLLER_POLICY_OFF);
+   elm_scroller_page_scroll_limit_set(sc, 1, 0);
+   elm_win_resize_object_add(win, sc);
+   evas_object_show(sc);
+
+   bx = elm_box_add(sc);
+   elm_box_horizontal_set(bx, EINA_TRUE);
+   elm_object_content_set(sc, bx);
+   evas_object_show(bx);
+
+   ly = elm_layout_add(bx);
+   snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get());
+   elm_layout_file_set(ly, buf, "page_layout");
+   rect = evas_object_rectangle_add(evas_object_evas_get(ly));
+   evas_object_color_set(rect, 50, 0, 0, 50);
+   elm_object_part_content_set(ly, "page", rect);
+
+   en = elm_entry_add(ly);
+   elm_object_part_text_set(en, "guide", "Entry area");
+   elm_object_text_set(en, "This is very long text, it is longer than width of 
this page. So if scroller is moved to next page, that is bug when you click 
under button and then click this entry text");
+   elm_object_part_content_set(ly, "element1", en);
+   elm_entry_scrollable_set(en, EINA_TRUE);
+   elm_entry_single_line_set(en, EINA_TRUE);
+   evas_object_show(en);
+
+   btn = elm_button_add(ly);
+   elm_object_text_set(btn, "Click this and then click entry");
+   elm_object_part_content_set(ly, "element2", btn);
+   evas_object_smart_callback_add(btn, "clicked", my_en_bt_clr, en);
+   evas_object_show(btn);
+   elm_object_focus_set(btn, EINA_TRUE);
+
+   elm_object_part_text_set(ly, "text", "Page1");
+   elm_box_pack_end(bx, ly);
+   evas_object_show(ly);
+
+   ly = elm_layout_add(bx);
+   snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get());
+   elm_layout_file_set(ly, buf, "page_layout");
+   rect = evas_object_rectangle_add(evas_object_evas_get(ly));
+   evas_object_color_set(rect, 0, 50, 0, 50);
+   elm_object_part_content_set(ly, "page", rect);
+   elm_object_part_text_set(ly, "text", "Page2");
+
+   lb = elm_label_add(ly);
+   elm_object_text_set(lb, "It should be shown by user's scroll");
+   elm_object_part_content_set(ly, "element2", lb);
+   evas_object_show(lb);
+
+   elm_box_pack_end(bx, ly);
+   evas_object_show(ly);
+
+   evas_object_resize(win, 400, 550);
+   evas_object_show(win);
+
+}
+
+static void
 my_ent_bt_clr(void *data, Evas_Object *obj EINA_UNUSED, void *event_info 
EINA_UNUSED)
 {
    Evas_Object *en = data;
diff --git a/src/lib/elementary/elm_entry.c b/src/lib/elementary/elm_entry.c
index 358d800..466e397 100644
--- a/src/lib/elementary/elm_entry.c
+++ b/src/lib/elementary/elm_entry.c
@@ -1273,6 +1273,8 @@ _elm_entry_elm_widget_on_focus(Eo *obj, Elm_Entry_Data 
*sd, Elm_Object_Item *ite
 EOLIAN static Eina_Bool
 _elm_entry_elm_widget_on_focus_region(Eo *obj EINA_UNUSED, Elm_Entry_Data *sd, 
Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h)
 {
+   Evas_Coord edje_x, edje_y, elm_x, elm_y;
+
    edje_object_part_text_cursor_geometry_get
      (sd->entry_edje, "elm.text", x, y, w, h);
 
@@ -1282,6 +1284,13 @@ _elm_entry_elm_widget_on_focus_region(Eo *obj 
EINA_UNUSED, Elm_Entry_Data *sd, E
         if (y) *y = 0;
      }
 
+   evas_object_geometry_get(sd->entry_edje, &edje_x, &edje_y, NULL, NULL);
+
+   evas_object_geometry_get(obj, &elm_x, &elm_y, NULL, NULL);
+
+   if (x) *x += edje_x - elm_x;
+   if (y) *y += edje_y - elm_y;
+
    return EINA_TRUE;
 }
 

-- 


Reply via email to