From c3f0a0c59d9d73ce4861ed771c5ded1eadab4f50 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Thu, 15 May 2014 17:43:00 +0900 Subject: [PATCH] fix behavior of edje entry to match other toolkit entires this fixes T1229 in the part about the cursor behavior when you press updown/left/right when a selection is there. @fix --- src/lib/edje/edje_entry.c | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/src/lib/edje/edje_entry.c b/src/lib/edje/edje_entry.c index f7bfa90612..ab823ce2d9 100644 --- a/src/lib/edje/edje_entry.c +++ b/src/lib/edje/edje_entry.c @@ -1388,7 +1388,14 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, _sel_start(en->cursor, rp->object, en); ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } - else _sel_clear(ed, en->cursor, rp->object, en); + else + { + if (evas_textblock_cursor_compare(en->sel_start, en->sel_end) < 0) + evas_textblock_cursor_copy(en->sel_start, en->cursor); + else + evas_textblock_cursor_copy(en->sel_end, en->cursor); + _sel_clear(ed, en->cursor, rp->object, en); + } } if (_curs_up(en->cursor, rp->object, en)) ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; @@ -1417,7 +1424,14 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, _sel_start(en->cursor, rp->object, en); ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } - else _sel_clear(ed, en->cursor, rp->object, en); + else + { + if (evas_textblock_cursor_compare(en->sel_start, en->sel_end) < 0) + evas_textblock_cursor_copy(en->sel_end, en->cursor); + else + evas_textblock_cursor_copy(en->sel_start, en->cursor); + _sel_clear(ed, en->cursor, rp->object, en); + } } if (_curs_down(en->cursor, rp->object, en)) ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; @@ -1444,7 +1458,14 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, _sel_start(en->cursor, rp->object, en); ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } - else _sel_clear(ed, en->cursor, rp->object, en); + else + { + if (evas_textblock_cursor_compare(en->sel_start, en->sel_end) < 0) + evas_textblock_cursor_copy(en->sel_start, en->cursor); + else + evas_textblock_cursor_copy(en->sel_end, en->cursor); + _sel_clear(ed, en->cursor, rp->object, en); + } } if (evas_textblock_cursor_char_prev(en->cursor)) ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; @@ -1472,7 +1493,14 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, _sel_start(en->cursor, rp->object, en); ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } - else _sel_clear(ed, en->cursor, rp->object, en); + else + { + if (evas_textblock_cursor_compare(en->sel_start, en->sel_end) < 0) + evas_textblock_cursor_copy(en->sel_end, en->cursor); + else + evas_textblock_cursor_copy(en->sel_start, en->cursor); + _sel_clear(ed, en->cursor, rp->object, en); + } } /* If control is pressed, go to the end of the word */ if (control) evas_textblock_cursor_word_end(en->cursor);