diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c index 58cc4764c3..87d6664287 100644 --- a/src/lib/evas/canvas/evas_object_textblock.c +++ b/src/lib/evas/canvas/evas_object_textblock.c @@ -7349,7 +7349,23 @@ evas_textblock_cursor_word_start(Evas_Textblock_Cursor *cur) for (i = cur->pos ; _is_white(text[i]) && BREAK_AFTER(i) ; i--) { - if (i == 0) break; + if (i == 0) + { + Evas_Object_Textblock_Node_Text *pnode; + pnode = _NODE_TEXT(EINA_INLIST_GET(cur->node)->prev); + if (pnode) + { + cur->node = pnode; + len = eina_ustrbuf_length_get(cur->node->unicode); + cur->pos = len - 1; + free(breaks); + return evas_textblock_cursor_word_start(cur); + } + else + { + break; + } + } } for ( ; i > 0 ; i--) @@ -7390,6 +7406,18 @@ evas_textblock_cursor_word_end(Evas_Textblock_Cursor *cur) } for (i = cur->pos; text[i] && _is_white(text[i]) && (BREAK_AFTER(i)) ; i++); + if (i == len) + { + Evas_Object_Textblock_Node_Text *nnode; + nnode = _NODE_TEXT(EINA_INLIST_GET(cur->node)->next); + if (nnode) + { + cur->node = nnode; + cur->pos = 0; + free(breaks); + return evas_textblock_cursor_word_end(cur); + } + } for ( ; text[i] ; i++) { diff --git a/src/tests/evas/evas_test_textblock.c b/src/tests/evas/evas_test_textblock.c index a727b760f2..63ba40eda6 100644 --- a/src/tests/evas/evas_test_textblock.c +++ b/src/tests/evas/evas_test_textblock.c @@ -637,6 +637,18 @@ START_TEST(evas_textblock_cursor) evas_textblock_cursor_word_end(cur); ck_assert_int_eq(5, evas_textblock_cursor_pos_get(cur)); + + /* moving across paragraphs */ + evas_object_textblock_text_markup_set(tb, + "test" + " case"); + evas_textblock_cursor_pos_set(cur, 4); + evas_textblock_cursor_word_end(cur); + ck_assert_int_eq(10, evas_textblock_cursor_pos_get(cur)); + + evas_textblock_cursor_pos_set(cur, 6); + evas_textblock_cursor_word_start(cur); + ck_assert_int_eq(0, evas_textblock_cursor_pos_get(cur)); } /* Make sure coords are correct for ligatures */