forked from enlightenment/efl
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:
parent
663ce7f2fc
commit
7b374f1dd3
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue