diff options
author | Bowon Ryu <bowon.ryu@samsung.com> | 2019-05-21 09:30:04 -0400 |
---|---|---|
committer | Mike Blumenkrantz <zmike@samsung.com> | 2019-05-21 09:30:04 -0400 |
commit | b5a7ee2ae4466e87d0e3a62aa7885ecda9e30aea (patch) | |
tree | 3dac596af225c6ab1a7b431faef56d8a65f60c5c | |
parent | 205e5a5fe81d768dbad8985f10585bb44b453dde (diff) | |
download | efl-b5a7ee2ae4466e87d0e3a62aa7885ecda9e30aea.tar.gz |
elm_entry: prevents invalid cursor position updates
Summary:
sd->cursor_pos is updated in _entry_cursor_changed_signal_cb.
Generally, there is no problem.
But in some cases, before the _entry_cursor_changed_signal_cb is called
there is a situation in which cursor_pos is updated through _elm_entry_efl_ui_widget_theme_apply.
In this case,
before _entry_cursor_changed_signal_cb is called,
in _elm_entry_efl_ui_widget_theme_apply ()
cursor_pos = sd->cursor_pos; The wrong cursor_pos is set here.
Because it is the value before sd->cursor_pos is updated.
This causes an invalid cursor position when entering a key into the entry.
This patch prevents sd->cursor_pos from being updated with invalid values.
Reviewers: zmike, woohyun
Reviewed By: zmike
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D8923
-rw-r--r-- | src/lib/elementary/elm_entry.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/lib/elementary/elm_entry.c b/src/lib/elementary/elm_entry.c index 207c10368d..37e75245dc 100644 --- a/src/lib/elementary/elm_entry.c +++ b/src/lib/elementary/elm_entry.c @@ -925,7 +925,14 @@ _elm_entry_efl_ui_widget_theme_apply(Eo *obj, Elm_Entry_Data *sd) edje_object_part_text_style_user_push(sd->entry_edje, "elm.text", stl_user); eina_stringshare_del(stl_user); - cursor_pos = sd->cursor_pos; + cursor_pos = edje_object_part_text_cursor_pos_get + (sd->entry_edje, "elm.text", EDJE_CURSOR_MAIN); + + if (cursor_pos != sd->cursor_pos) + { + sd->cursor_pos = cursor_pos; + sd->cur_changed = EINA_TRUE; + } elm_object_text_set(obj, t); eina_stringshare_del(t); |