diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c --- a/src/lib/evas/canvas/evas_object_textblock.c +++ b/src/lib/evas/canvas/evas_object_textblock.c @@ -8379,12 +8379,37 @@ { Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS); evas_object_async_block(obj); + Efl_Text_Cursor_Handle *cur; + char* chr; + Eina_Bool old_mode = o->legacy_newline; + if (o->legacy_newline == mode) return; o->legacy_newline = mode; - /* FIXME: Should recreate all the textnodes... For now, it's just - * for new text inserted. */ + + if (!o->multiline) + return; + + efl_event_freeze(eo_obj); + + cur = evas_object_textblock_cursor_new(eo_obj); + + do + { + chr = evas_textblock_cursor_content_get(cur); + if(chr && !strcmp(chr, "
")) + { + o->legacy_newline = old_mode; + evas_textblock_cursor_char_delete(cur); + o->legacy_newline = mode; + evas_textblock_cursor_format_append(cur, "
"); + } + } while (evas_textblock_cursor_char_next(cur)); + + evas_textblock_cursor_free(cur); + + efl_event_thaw(eo_obj); } EOLIAN static Eina_Bool diff --git a/src/tests/evas/evas_test_textblock.c b/src/tests/evas/evas_test_textblock.c --- a/src/tests/evas/evas_test_textblock.c +++ b/src/tests/evas/evas_test_textblock.c @@ -4892,6 +4892,22 @@ ck_assert_str_eq(res, "bc
"); free(res); + efl_text_set(txt, "Test\n Text\u2029para"); + Efl_Text_Cursor_Object *cursor = efl_canvas_textblock_cursor_create(txt); + efl_text_cursor_object_move(cursor, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST); + ck_assert_msg(efl_text_cursor_object_move(cursor, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_NEXT)); + ck_assert_msg(!efl_text_cursor_object_move(cursor, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_NEXT)); + + efl_canvas_textblock_newline_as_paragraph_separator_set(txt, EINA_TRUE); + efl_text_cursor_object_move(cursor, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST); + ck_assert_msg(efl_text_cursor_object_move(cursor, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_NEXT)); + ck_assert_msg(efl_text_cursor_object_move(cursor, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_NEXT)); + + efl_canvas_textblock_newline_as_paragraph_separator_set(txt, EINA_FALSE); + efl_text_cursor_object_move(cursor, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST); + ck_assert_msg(efl_text_cursor_object_move(cursor, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_NEXT)); + ck_assert_msg(!efl_text_cursor_object_move(cursor, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_NEXT)); + END_EFL_CANVAS_TEXTBLOCK_TEST(); } EFL_END_TEST