diff --git a/src/lib/elementary/efl_ui_internal_text_interactive.c b/src/lib/elementary/efl_ui_internal_text_interactive.c index f40ea261c4..d2220c451c 100644 --- a/src/lib/elementary/efl_ui_internal_text_interactive.c +++ b/src/lib/elementary/efl_ui_internal_text_interactive.c @@ -1251,7 +1251,7 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void #endif if (efl_text_interactive_have_selection_get(obj)) ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; - if (efl_text_cursor_object_move(cur,EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_PREVIOUS)) + if (efl_text_cursor_object_move(cur,EFL_TEXT_CURSOR_MOVE_TYPE_CLUSTER_PREVIOUS)) ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; _key_down_sel_post(obj, cur, en, shift); @@ -1270,7 +1270,7 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void #endif if (efl_text_interactive_have_selection_get(obj)) ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; - if (efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_NEXT)) + if (efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CLUSTER_NEXT)) ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; _key_down_sel_post(obj, cur, en, shift); @@ -1551,7 +1551,7 @@ end: } static void -_cursor_char_coord_set(Efl_Canvas_Textblock *obj, Efl_Text_Cursor_Object *cur, Evas_Coord canvasx, Evas_Coord canvasy, Evas_Coord *_cx, Evas_Coord *_cy) +_cursor_cluster_coord_set(Efl_Canvas_Textblock *obj, Efl_Text_Cursor_Object *cur, Evas_Coord canvasx, Evas_Coord canvasy, Evas_Coord *_cx, Evas_Coord *_cy) { Evas_Coord cx, cy; Evas_Coord x, y, lh = 0, cly = 0; @@ -1582,7 +1582,7 @@ _cursor_char_coord_set(Efl_Canvas_Textblock *obj, Efl_Text_Cursor_Object *cur, E efl_del(line_cur); /* No need to check return value if not able to set the char coord Textblock * will take care */ - efl_text_cursor_object_char_coord_set(cur, EINA_POSITION2D(cx, cy)); + efl_text_cursor_object_cluster_coord_set(cur, EINA_POSITION2D(cx, cy)); if (_cx) *_cx = cx; if (_cy) *_cy = cy; } @@ -1676,7 +1676,7 @@ _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EIN goto end; } } - _cursor_char_coord_set(obj, cur, ev->canvas.x, ev->canvas.y, &cx, &cy); + _cursor_cluster_coord_set(obj, cur, ev->canvas.x, ev->canvas.y, &cx, &cy); if (dosel) { @@ -1721,7 +1721,7 @@ _mouse_up_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void } #endif - _cursor_char_coord_set(obj, cur, ev->canvas.x, ev->canvas.y, &cx, &cy); + _cursor_cluster_coord_set(obj, cur, ev->canvas.x, ev->canvas.y, &cx, &cy); if (en->select_allow) { diff --git a/src/tests/elementary/efl_ui_test_text.c b/src/tests/elementary/efl_ui_test_text.c index ad876c6bcd..93a8a82669 100644 --- a/src/tests/elementary/efl_ui_test_text.c +++ b/src/tests/elementary/efl_ui_test_text.c @@ -483,6 +483,47 @@ EFL_START_TEST(text_multiline_singleline_cursor_pos) } EFL_END_TEST +EFL_START_TEST(text_keyboard_mouse_cluster_cursor_movement) +{ + Eo *txt; + Eo *cursor; + Eo *win = win_add(); + Evas *e; + Eina_Rect rc, rc2; + + txt = efl_add(EFL_UI_TEXTBOX_CLASS, win); + + efl_gfx_entity_size_set(win, EINA_SIZE2D(300, 300)); + efl_gfx_entity_size_set(txt, EINA_SIZE2D(300, 300)); + efl_ui_textbox_scrollable_set(txt, EINA_TRUE); + get_me_to_those_events(txt); + + efl_text_markup_set(txt, "A\u1100\u1161\u11AA"); + cursor = efl_text_interactive_main_cursor_get(txt); + efl_text_cursor_object_position_set(cursor, 1); + + e = evas_object_evas_get(txt); + efl_ui_focus_util_focus(txt); + evas_event_feed_key_down(e, "Right", "Right", "Right", "Right", time(NULL), NULL); + + ck_assert_int_eq(4, efl_text_cursor_object_position_get(cursor)); + + efl_text_cursor_object_position_set(cursor, 1); + efl_text_cursor_object_move(cursor, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_NEXT); + efl_text_cursor_object_move(cursor, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_NEXT); + rc = efl_text_cursor_object_content_geometry_get(cursor); + rc2 = efl_ui_scrollable_viewport_geometry_get(txt); + + efl_text_cursor_object_position_set(cursor, 0); + click_object_at(win, rc2.x + rc.x + (rc.w/2), rc2.y + rc.y + (rc.h/2)); + + ck_assert_int_eq(4, efl_text_cursor_object_position_get(cursor)); + + efl_del(txt); + efl_del(win); +} +EFL_END_TEST + void efl_ui_test_text(TCase *tc) { tcase_add_test(tc, text_cnp); @@ -497,4 +538,5 @@ void efl_ui_test_text(TCase *tc) tcase_add_test(tc, text_singleline_cursor_movement); tcase_add_test(tc, text_multiline_singleline_cursor_pos); tcase_add_test(tc, text_on_startup); + tcase_add_test(tc, text_keyboard_mouse_cluster_cursor_movement); }