Evas textblock: Fixed an issue when deleting A from <a><a>A</a></a>.

Reported by WooHyun. Thanks a lot, great catch, also told me where and what
the issue is exactly.

Also added a test to verify this works.

SVN revision: 63493
This commit is contained in:
Tom Hacohen 2011-09-20 08:05:50 +00:00
parent 663ce7f2fc
commit 7b374f1dd3
2 changed files with 12 additions and 3 deletions

View File

@ -5990,11 +5990,11 @@ _evas_textblock_node_format_remove_matching(Evas_Object_Textblock *o,
_evas_textblock_node_format_remove(o, fmt, 0);
}
/* Find the matching format and pop it, if the matching format
* is out format, i.e the last one, pop and break. */
* is our format, i.e the last one, pop and break. */
else
{
Eina_List *i;
EINA_LIST_FOREACH(formats, i, fnode)
Eina_List *i, *next;
EINA_LIST_FOREACH_SAFE(formats, i, next, fnode)
{
if (_FORMAT_IS_CLOSER_OF(
fnode->orig_format, fstr, fstr_len))
@ -6003,6 +6003,7 @@ _evas_textblock_node_format_remove_matching(Evas_Object_Textblock *o,
formats = eina_list_remove_list(formats, i);
_evas_textblock_node_format_remove(o, fnode, 0);
_evas_textblock_node_format_remove(o, fmt, 0);
break;
}
}
}

View File

@ -884,6 +884,14 @@ START_TEST(evas_textblock_format_removal)
fnode = evas_textblock_node_format_next_get(fnode);
fail_if (fnode);
/* Remove two pairs with the same name and same positions. */
evas_object_textblock_text_markup_set(tb, "<a><a>A</a></a>");
evas_textblock_cursor_pos_set(cur, 0);
evas_textblock_cursor_char_delete(cur);
fnode = evas_textblock_node_format_first_get(tb);
fail_if (fnode);
/* Try to remove a format that doesn't have a pair (with a bad mkup) */
evas_object_textblock_text_markup_set(tb, "a<b>b<i>c</>d</i>e");
evas_textblock_cursor_pos_set(cur, 2);