diff options
Diffstat (limited to 'src/lib/elementary/elm_entry.c')
-rw-r--r-- | src/lib/elementary/elm_entry.c | 66 |
1 files changed, 37 insertions, 29 deletions
diff --git a/src/lib/elementary/elm_entry.c b/src/lib/elementary/elm_entry.c index 336b0f7ae8..4c42535571 100644 --- a/src/lib/elementary/elm_entry.c +++ b/src/lib/elementary/elm_entry.c @@ -138,16 +138,14 @@ ok: // ok - return api } static char * -_file_load(const char *file) +_file_load(Eo *obj) { Eina_File *f; char *text = NULL; void *tmp = NULL; size_t size; - f = eina_file_open(file, EINA_FALSE); - if (!f) return NULL; - + f = eina_file_dup(efl_file_mmap_get(obj)); size = eina_file_size_get(f); if (size) { @@ -175,11 +173,11 @@ _file_load(const char *file) } static char * -_plain_load(const char *file) +_plain_load(Eo *obj) { char *text; - text = _file_load(file); + text = _file_load(obj); if (text) { char *text2; @@ -192,47 +190,54 @@ _plain_load(const char *file) return NULL; } -static Eina_Bool +static Eina_Error _load_do(Evas_Object *obj) { char *text; + Eina_Bool fail = EINA_FALSE; + Eina_Error err = 0; ELM_ENTRY_DATA_GET(obj, sd); if (!sd->file) { elm_object_text_set(obj, ""); - return EINA_TRUE; + return 0; } switch (sd->format) { case ELM_TEXT_FORMAT_PLAIN_UTF8: - text = _plain_load(sd->file); + text = _plain_load(obj); + fail = !text; break; case ELM_TEXT_FORMAT_MARKUP_UTF8: - text = _file_load(sd->file); + text = _file_load(obj); + fail = !text; break; default: text = NULL; break; } + if (fail) + { + err = errno; + /* FIXME: this is more like a hint but not totally accurate... */ + if (!err) err = ENOENT; + } if (text) { elm_object_text_set(obj, text); free(text); - return EINA_TRUE; + return 0; } - else - { - elm_object_text_set(obj, ""); + elm_object_text_set(obj, ""); - return EINA_FALSE; - } + return err; } static void @@ -4969,24 +4974,34 @@ elm_entry_file_set(Evas_Object *obj, const char *file, Elm_Text_Format format) { Eina_Bool ret; elm_obj_entry_file_text_format_set(obj, format); - ret = efl_file_set(obj, file, NULL); + ret = efl_file_simple_load(obj, file, NULL); return ret; } -EOLIAN static Eina_Bool -_elm_entry_efl_file_file_set(Eo *obj, Elm_Entry_Data *sd, const char *file, const char *group EINA_UNUSED) +EOLIAN static Eina_Error +_elm_entry_efl_file_load(Eo *obj, Elm_Entry_Data *sd) { + Eina_Error err; + + if (efl_file_loaded_get(obj)) return 0; + err = efl_file_load(efl_super(obj, MY_CLASS)); + if (err) return err; ELM_SAFE_FREE(sd->delay_write, ecore_timer_del); if (sd->auto_save) _save_do(obj); + return _load_do(obj); +} + +EOLIAN static Eina_Error +_elm_entry_efl_file_file_set(Eo *obj, Elm_Entry_Data *sd, const char *file) +{ eina_stringshare_replace(&sd->file, file); - Eina_Bool int_ret = _load_do(obj); - return int_ret; + return efl_file_set(efl_super(obj, MY_CLASS), file); } EAPI void elm_entry_file_get(const Evas_Object *obj, const char **file, Elm_Text_Format *format) { - efl_file_get(obj, file, NULL); + if (file) *file = efl_file_get(obj); if (format) { ELM_ENTRY_DATA_GET(obj, sd); @@ -4996,13 +5011,6 @@ elm_entry_file_get(const Evas_Object *obj, const char **file, Elm_Text_Format *f } EOLIAN static void -_elm_entry_efl_file_file_get(const Eo *obj EINA_UNUSED, Elm_Entry_Data *sd, const char **file, const char **group) -{ - if (file) *file = sd->file; - if (group) *group = NULL; -} - -EOLIAN static void _elm_entry_file_save(Eo *obj, Elm_Entry_Data *sd) { ELM_SAFE_FREE(sd->delay_write, ecore_timer_del); |