diff --git a/src/lib/elementary/elm_entry.c b/src/lib/elementary/elm_entry.c index 7478a40fd8..2a6ad77518 100644 --- a/src/lib/elementary/elm_entry.c +++ b/src/lib/elementary/elm_entry.c @@ -3314,6 +3314,7 @@ static Eina_Bool _elm_entry_text_set(Eo *obj, Elm_Entry_Data *sd, const char *part, const char *entry) { int len = 0; + const char * current_text = NULL; if (!entry) entry = ""; if (!_elm_layout_part_aliasing_eval(obj, &part, EINA_TRUE)) @@ -3327,8 +3328,6 @@ _elm_entry_text_set(Eo *obj, Elm_Entry_Data *sd, const char *part, const char *e } evas_event_freeze(evas_object_evas_get(obj)); - ELM_SAFE_FREE(sd->text, eina_stringshare_del); - sd->changed = EINA_TRUE; /* Clear currently pending job if there is one */ if (sd->append_text_idler) @@ -3345,6 +3344,14 @@ _elm_entry_text_set(Eo *obj, Elm_Entry_Data *sd, const char *part, const char *e sd->append_text_left = NULL; } + /* If old and new text are the same do nothing */ + current_text = edje_object_part_text_get(sd->entry_edje, "elm.text"); + if (current_text == entry || !strcmp(entry, current_text)) + goto done; + + ELM_SAFE_FREE(sd->text, eina_stringshare_del); + sd->changed = EINA_TRUE; + /* Need to clear the entry first */ sd->cursor_pos = edje_object_part_text_cursor_pos_get (sd->entry_edje, "elm.text", EDJE_CURSOR_MAIN); @@ -3356,6 +3363,7 @@ _elm_entry_text_set(Eo *obj, Elm_Entry_Data *sd, const char *part, const char *e else _elm_entry_guide_update(obj, EINA_FALSE); +done: evas_event_thaw(evas_object_evas_get(obj)); evas_event_thaw_eval(evas_object_evas_get(obj)); return EINA_TRUE;