diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c index fe6552d4ac..0889de197d 100644 --- a/src/lib/evas/canvas/evas_object_textblock.c +++ b/src/lib/evas/canvas/evas_object_textblock.c @@ -13342,21 +13342,26 @@ _evas_textblock_cursor_coord_set(Evas_Textblock_Cursor *cur, Evas_Coord x, Evas_ * try to move cursor to a nearest breakable position. */ if (grapheme_breaks && (grapheme_breaks[pos + it->text_pos - 1] != GRAPHEMEBREAK_BREAK)) { - size_t left_index = pos + it->text_pos - 1; + int left_index = pos + it->text_pos - 1; size_t right_index = pos + it->text_pos - 1; + int temp_index; int lx, rx; /* To the left */ - while ((left_index > 0) && + while ((left_index >= 0) && (grapheme_breaks[left_index] != GRAPHEMEBREAK_BREAK)) { left_index--; } + temp_index = left_index - it->text_pos + 1; + if (temp_index < 0) + temp_index = 0; + ENFN->font_pen_coords_get(ENC, ti->parent.format->font.font, &ti->text_props, - left_index - it->text_pos + 1, + temp_index, &lx, NULL, NULL, NULL); /* To the right */ diff --git a/src/tests/evas/evas_test_textblock.c b/src/tests/evas/evas_test_textblock.c index a0b68ac90a..e56b1d3912 100644 --- a/src/tests/evas/evas_test_textblock.c +++ b/src/tests/evas/evas_test_textblock.c @@ -1003,6 +1003,20 @@ EFL_START_TEST(evas_textblock_cursor) while (evas_textblock_cursor_char_prev(cur2)) j++; ck_assert_int_eq(j, 4); + //make sure if we have cluster at line start we return to pos 0 + Evas_Coord x_coord, y_coord; + int pos; + + cur2 = evas_object_textblock_cursor_new(tb); + evas_object_textblock_text_markup_set(tb, "☪️"); + + evas_textblock_cursor_char_next(cur2); + evas_textblock_cursor_pen_geometry_get(cur2, &x_coord, &y_coord, NULL, NULL); + evas_textblock_cursor_cluster_coord_set(cur, x_coord, y_coord); + pos = evas_textblock_cursor_pos_get(cur); + + ck_assert_int_eq(pos, 0); + END_TB_TEST(); } EFL_END_TEST