ok final known bug god for del. now.. anchors

SVN revision: 36738
This commit is contained in:
Carsten Haitzler 2008-10-17 01:40:10 +00:00
parent 9e6d0e4ce8
commit ad5a76df19
1 changed files with 50 additions and 38 deletions

View File

@ -85,11 +85,22 @@ _curs_next(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
{
while (evas_textblock_cursor_node_format_get(c))
{
if (evas_textblock_cursor_node_format_is_visible_get(c)) break;
if (!evas_textblock_cursor_node_next(c)) break;
if (evas_textblock_cursor_node_format_is_visible_get(c))
break;
if (!evas_textblock_cursor_node_next(c))
break;
}
}
}
else
{
int len, pos;
len = evas_textblock_cursor_node_text_length_get(c);
pos = evas_textblock_cursor_pos_get(c);
if (pos == len)
evas_textblock_cursor_node_next(c);
}
_curs_update_from_curs(c, o, en);
}
@ -328,6 +339,39 @@ _range_del(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
evas_textblock_cursor_range_delete(en->sel_start, en->sel_end);
}
static void
_backspace(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
{
Evas_Textblock_Cursor *c1, *c2;
int nodel = 0;
c1 = evas_object_textblock_cursor_new(o);
if (!evas_textblock_cursor_char_prev(c))
{
if (!evas_textblock_cursor_node_prev(c))
nodel = 1;
else
{
evas_textblock_cursor_copy(c, c1);
if (evas_textblock_cursor_node_format_get(c) &&
(!evas_textblock_cursor_node_format_is_visible_get(c)))
_curs_back(c, o, en);
}
}
else
evas_textblock_cursor_copy(c, c1);
c2 = evas_object_textblock_cursor_new(o);
evas_textblock_cursor_copy(c, c2);
if (!nodel) evas_textblock_cursor_range_delete(c1, c2);
evas_textblock_cursor_copy(c, c1);
_curs_back(c, o, en);
if (evas_textblock_cursor_compare(c, c1))
_curs_next(c, o, en);
evas_textblock_cursor_free(c1);
evas_textblock_cursor_free(c2);
}
static void
_edje_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
@ -399,31 +443,7 @@ _edje_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
if (en->have_selection)
_range_del(en->cursor, rp->object, en);
else
{
Evas_Textblock_Cursor *c1, *c2;
int nodel = 0;
c1 = evas_object_textblock_cursor_new(rp->object);
if (!evas_textblock_cursor_char_prev(en->cursor))
{
if (!evas_textblock_cursor_node_prev(en->cursor))
nodel = 1;
else
{
evas_textblock_cursor_copy(en->cursor, c1);
if (evas_textblock_cursor_node_format_get(en->cursor) &&
(!evas_textblock_cursor_node_format_is_visible_get(en->cursor)))
_curs_back(en->cursor, rp->object, en);
}
}
else
evas_textblock_cursor_copy(en->cursor, c1);
c2 = evas_object_textblock_cursor_new(rp->object);
evas_textblock_cursor_copy(en->cursor, c2);
if (!nodel) evas_textblock_cursor_range_delete(c1, c2);
evas_textblock_cursor_free(c1);
evas_textblock_cursor_free(c2);
}
_backspace(en->cursor, rp->object, en);
}
_sel_clear(en->cursor, rp->object, en);
_curs_update_from_curs(en->cursor, rp->object, en);
@ -444,22 +464,14 @@ _edje_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
_range_del(en->cursor, rp->object, en);
else
{
Evas_Textblock_Cursor *c1, *c2;
int nodel = 0;
Evas_Textblock_Cursor *c1;
c1 = evas_object_textblock_cursor_new(rp->object);
evas_textblock_cursor_copy(en->cursor, c1);
_curs_next(en->cursor, rp->object, en);
if (!evas_textblock_cursor_char_prev(en->cursor))
{
if (!evas_textblock_cursor_node_prev(en->cursor))
nodel = 1;
}
c2 = evas_object_textblock_cursor_new(rp->object);
evas_textblock_cursor_copy(en->cursor, c2);
if (!nodel) evas_textblock_cursor_range_delete(c1, c2);
if (evas_textblock_cursor_compare(en->cursor, c1))
_backspace(en->cursor, rp->object, en);
evas_textblock_cursor_free(c1);
evas_textblock_cursor_free(c2);
}
}
_sel_clear(en->cursor, rp->object, en);