forked from enlightenment/efl
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
This commit is contained in:
parent
bc6eb250a0
commit
f20f4c6e50
|
@ -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";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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_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_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_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_entry3(void *data, Evas_Object *obj, void *event_info);
|
||||||
void test_entry4(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);
|
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 Default", test_entry_style_default);
|
||||||
ADD_TEST(NULL, "Entries", "Entry Style User", test_entry_style_user);
|
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 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 3", test_entry3);
|
||||||
ADD_TEST(NULL, "Entries", "Entry 4", test_entry4);
|
ADD_TEST(NULL, "Entries", "Entry 4", test_entry4);
|
||||||
ADD_TEST(NULL, "Entries", "Entry 5", test_entry5);
|
ADD_TEST(NULL, "Entries", "Entry 5", test_entry5);
|
||||||
|
|
|
@ -685,6 +685,82 @@ test_entry_scrolled(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *
|
||||||
evas_object_show(win);
|
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
|
static void
|
||||||
my_ent_bt_clr(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
my_ent_bt_clr(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1273,6 +1273,8 @@ _elm_entry_elm_widget_on_focus(Eo *obj, Elm_Entry_Data *sd, Elm_Object_Item *ite
|
||||||
EOLIAN static Eina_Bool
|
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)
|
_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
|
edje_object_part_text_cursor_geometry_get
|
||||||
(sd->entry_edje, "elm.text", x, y, w, h);
|
(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;
|
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;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue