From b20190232c7bf6c280df84ba9cb646098be28331 Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Mon, 18 Jun 2012 13:31:20 +0000 Subject: [PATCH] Evas textblock: Fixed issues with deleting paragraphs using range_del. Also added test cases for that. SVN revision: 72398 --- .../src/lib/canvas/evas_object_textblock.c | 17 ++--------------- legacy/evas/src/tests/evas_test_textblock.c | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/legacy/evas/src/lib/canvas/evas_object_textblock.c b/legacy/evas/src/lib/canvas/evas_object_textblock.c index 3f8a2c8e5b..5c2d3ca4d6 100644 --- a/legacy/evas/src/lib/canvas/evas_object_textblock.c +++ b/legacy/evas/src/lib/canvas/evas_object_textblock.c @@ -7666,8 +7666,6 @@ evas_textblock_cursor_range_delete(Evas_Textblock_Cursor *cur1, Evas_Textblock_C if (n1 == n2) { - Evas_Object_Textblock_Node_Format *remove_format = NULL; - Evas_Object_Textblock_Node_Text *merge_node = NULL; if ((cur1->pos == 0) && (cur2->pos == eina_ustrbuf_length_get(n1->unicode))) { @@ -7681,12 +7679,8 @@ evas_textblock_cursor_range_delete(Evas_Textblock_Cursor *cur1, Evas_Textblock_C else { n = _NODE_TEXT(EINA_INLIST_GET(n1)->prev); - if (n) - { - merge_node = n; - remove_format = merge_node->format_node; - } - else + /* Short path */ + if (!n) { /* Clear the whole textblock - do it nicer. */ evas_object_textblock_text_markup_set(cur1->obj, ""); @@ -7701,13 +7695,6 @@ evas_textblock_cursor_range_delete(Evas_Textblock_Cursor *cur1, Evas_Textblock_C } eina_ustrbuf_remove(n1->unicode, cur1->pos, cur2->pos); _evas_textblock_cursors_update_offset(cur1, cur1->node, cur1->pos, - (cur2->pos - cur1->pos)); - if (merge_node) - { - _evas_textblock_node_text_adjust_offsets_to_start(o, n1, - 0, -1); - _evas_textblock_nodes_merge(o, merge_node); - evas_textblock_cursor_set_at_format(cur1, remove_format); - } } else { diff --git a/legacy/evas/src/tests/evas_test_textblock.c b/legacy/evas/src/tests/evas_test_textblock.c index d7d372f448..aa1e3d0b6c 100644 --- a/legacy/evas/src/tests/evas_test_textblock.c +++ b/legacy/evas/src/tests/evas_test_textblock.c @@ -1482,6 +1482,24 @@ START_TEST(evas_textblock_editing) evas_textblock_cursor_paragraph_first(cur); fail_if(evas_textblock_cursor_paragraph_next(cur)); + { + /* Limit to 1000 iterations so we'll never get into an infinite loop, + * even if broken */ + int limit = 1000; + evas_object_textblock_text_markup_set(tb, "this is a test eauoeuaouthis is a test1this is a test 3"); + evas_textblock_cursor_paragraph_last(cur); + while (evas_textblock_cursor_pos_get(cur) > 0) + { + limit--; + fail_if(limit <= 0); + evas_textblock_cursor_copy(cur, main_cur); + evas_textblock_cursor_char_prev(cur); + evas_textblock_cursor_word_start(cur); + evas_textblock_cursor_range_delete(cur, main_cur); + } + } + + /* Insert illegal characters inside the format. */ { const char *content;