herdsman pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=76939252278e4622067f9481251d03439a98761f
commit 76939252278e4622067f9481251d03439a98761f Author: Thiep Ha <thie...@gmail.com> Date: Thu Nov 26 09:52:48 2015 +0200 edje entry: return correct selection Summary: In entry, when selection_get function is called, selection is not always returned the current selection. Scenario: - In select mode, entry has selection (e.g, by double click). - When selection handler is moved, set the cursor the current coordinate with edje_object_part_text_cursor_pos_set() API. - Edje emits "selection,changed" signal. - Elementary gets current selection and stores it. - Elementary does not get selection as visual selection (e.g, text is highlighted with "entry test", but the selection returned from edje is "entry"). - If we copy and then paste to the entry, the pasted text is not same as selected text. Reason: - In _edje_entry_cursor_coord_set function, if entry has selection, we only emit "selection,changed" signal without freeing en->selection. - When _edje_entry_selection_get is called, we check the en->selection, since it is existed, we just return it which is not updated one. This patch clears en->selection, so that it is updated at _selection_get, and the updated selection is returned to caller. @fix Test Plan: In mobile profile, open entry - Right click, choose select, double click -> selection handlers are shown. - Drag selection handlers to change selection. - Right click, do copy. - Right click, do paste. - See the pasted text is not same as selection. Reviewers: raster, tasn, herdsman Subscribers: seoz, JackDanielZ, cedric Differential Revision: https://phab.enlightenment.org/D2746 --- src/lib/edje/edje_entry.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/lib/edje/edje_entry.c b/src/lib/edje/edje_entry.c index 92c40a6..c9b424c 100644 --- a/src/lib/edje/edje_entry.c +++ b/src/lib/edje/edje_entry.c @@ -3856,7 +3856,14 @@ _edje_entry_cursor_coord_set(Edje_Real_Part *rp, Edje_Cursor cur, (cur == EDJE_CURSOR_SELECTION_END)) { if (en->have_selection) - _edje_emit(en->ed, "selection,changed", rp->part->name); + { + if (en->selection) + { + free(en->selection); + en->selection = NULL; + } + _edje_emit(en->ed, "selection,changed", rp->part->name); + } } return evas_textblock_cursor_char_coord_set(c, x, y); } --