diff --git a/data/elementary/objects/test.edc b/data/elementary/objects/test.edc index 84407e5ad1..3b665e13f9 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 de8e6d3c6c..fff22fec44 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 c295cc3fb5..8ea2aa5ef3 100644 --- a/src/bin/elementary/test_entry.c +++ b/src/bin/elementary/test_entry.c @@ -685,6 +685,82 @@ test_entry_scrolled(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void * evas_object_show(win); } +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) { diff --git a/src/lib/elementary/elm_entry.c b/src/lib/elementary/elm_entry.c index 358d8006fa..466e397513 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; }