forked from enlightenment/efl
elm_entry: speed up setting text (check if same text is already set), fix setting same text pointer
This patch deal with two cases: 1- Setting text in Entry (elm_entry_entry_set) , as the one get using (elm_entry_entry_get), caused the entry to become empty. * becase entry string was free inside the elm_entry_entry_set function, without checking new passed string. Now we check if same string was passed to the function, then nothing need to be changed. ``` // Old Behaviour : Entry will become empty // New Behaviour : Entry will Skip setting same text elm_entry_entry_set(app->entry, elm_entry_entry_get(app->entry)); ``` 2- Setting text in Entry (elm_entry_entry_set) , with same content string. * internally entry will set empty string then set passed string, which will case recalculation and re-render the entry element. Now we check if same string data that is passed to the function is the same of the entry content, then nothing need to be changed. ``` // This will be skiped internally since same text is set elm_entry_entry_set(app->entry, "aaaaa"); elm_entry_entry_set(app->entry, "aaaaa"); //skipped ``` Reviewed-by: Marcel Hollerbach <mail@marcel-hollerbach.de> Differential Revision: https://phab.enlightenment.org/D8572
This commit is contained in:
parent
81703d1a5b
commit
546805650e
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue