elm_entry: prevents invalid cursor position updates 01/206701/1
authorBowon Ryu <bowon.ryu@samsung.com>
Tue, 21 May 2019 13:30:04 +0000 (09:30 -0400)
committerBowon Ryu <bowon.ryu@samsung.com>
Thu, 23 May 2019 07:52:14 +0000 (16:52 +0900)
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

Change-Id: I89fd0551435c429585529dcb095b18176d9fd0b1

src/lib/elementary/elm_entry.c

index 947cab9..fe7d5a0 100644 (file)
@@ -1298,7 +1298,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);