From 35ecfcd65014b0d05f20f1c0a18c299cbebd7429 Mon Sep 17 00:00:00 2001 From: Vitor Sousa Date: Wed, 14 Sep 2016 21:02:15 -0300 Subject: [PATCH] elm fileselector: fix legacy methods for Entry and Button Some legacy functions that works with string paths were not redirecting for the correct code when called with Elm.Fileselector.Button or Elm.Fileselector.Entry. This commit fixes this problem. @fix --- src/lib/elementary/elc_fileselector.c | 52 +++++++++++++++++++ src/lib/elementary/elc_fileselector_button.c | 50 ++++++++++++++++-- src/lib/elementary/elc_fileselector_entry.c | 31 ++++++++--- .../elementary/elm_interface_fileselector.h | 27 ++++++++++ .../elm_widget_fileselector_button.h | 1 + 5 files changed, 150 insertions(+), 11 deletions(-) diff --git a/src/lib/elementary/elc_fileselector.c b/src/lib/elementary/elc_fileselector.c index 1f87d75ff1..cc3a0655b0 100644 --- a/src/lib/elementary/elc_fileselector.c +++ b/src/lib/elementary/elc_fileselector.c @@ -2487,6 +2487,24 @@ EAPI const char * elm_fileselector_selected_get(const Evas_Object *obj) { ELM_FILESELECTOR_INTERFACE_CHECK(obj, NULL); + + const Efl_Class *cls = efl_class_get(obj); + if (cls == ELM_FILESELECTOR_CLASS) + return _elm_fileselector_selected_get_internal(obj); + else if (cls == ELM_FILESELECTOR_ENTRY_CLASS) + return _elm_fileselector_entry_selected_get_internal(obj); + else if (cls == ELM_FILESELECTOR_BUTTON_CLASS) + return _elm_fileselector_button_selected_get_internal(obj); + else + { + ERR("Unknown Elm.Fileselector class"); + return NULL; + } +} + +const char * +_elm_fileselector_selected_get_internal(const Evas_Object *obj) +{ ELM_FILESELECTOR_DATA_GET(obj, sd); if (!sd->path) return NULL; @@ -2515,6 +2533,25 @@ _elm_fileselector_elm_interface_fileselector_selected_model_get(Eo *fs EINA_UNUS EAPI Eina_Bool elm_fileselector_selected_set(Evas_Object *obj, const char *_path) +{ + ELM_FILESELECTOR_INTERFACE_CHECK(obj, EINA_FALSE); + + const Efl_Class *cls = efl_class_get(obj); + if (cls == ELM_FILESELECTOR_CLASS) + return _elm_fileselector_selected_set_internal(obj, _path); + else if (cls == ELM_FILESELECTOR_ENTRY_CLASS) + return _elm_fileselector_entry_selected_set_internal(obj, _path); + else if (cls == ELM_FILESELECTOR_BUTTON_CLASS) + return _elm_fileselector_button_selected_set_internal(obj, _path); + else + { + ERR("Unknown Elm.Fileselector class"); + return EINA_FALSE; + } +} + +Eina_Bool +_elm_fileselector_selected_set_internal(Evas_Object *obj, const char *_path) { ELM_FILESELECTOR_INTERFACE_CHECK(obj, EINA_FALSE); Eina_Bool ret = EINA_FALSE; @@ -2650,6 +2687,21 @@ _elm_fileselector_elm_interface_fileselector_selected_model_set(Eo *obj, Elm_Fil EAPI const Eina_List * elm_fileselector_selected_paths_get(const Evas_Object* obj) +{ + ELM_FILESELECTOR_INTERFACE_CHECK(obj, NULL); + + const Efl_Class *cls = efl_class_get(obj); + if (cls == ELM_FILESELECTOR_CLASS) + return _elm_fileselector_selected_paths_get_internal(obj); + else if (cls == ELM_FILESELECTOR_BUTTON_CLASS) + return _elm_fileselector_button_selected_paths_get_internal(obj); + else + ERR("Unknown Elm.Fileselector class"); + return NULL; +} + +const Eina_List * +_elm_fileselector_selected_paths_get_internal(const Evas_Object* obj) { ELM_FILESELECTOR_INTERFACE_CHECK(obj, NULL); Eina_List *l; diff --git a/src/lib/elementary/elc_fileselector_button.c b/src/lib/elementary/elc_fileselector_button.c index 3e90749a46..e408e2dd96 100644 --- a/src/lib/elementary/elc_fileselector_button.c +++ b/src/lib/elementary/elc_fileselector_button.c @@ -239,6 +239,7 @@ _elm_fileselector_button_efl_canvas_group_group_del(Eo *obj, Elm_Fileselector_Bu eina_stringshare_del(sd->fsd.path); if (sd->fsd.selection) efl_unref(sd->fsd.selection); + eina_stringshare_del(sd->fsd.selection_path); evas_object_del(sd->fsw); efl_canvas_group_del(efl_super(obj, MY_CLASS)); @@ -334,7 +335,7 @@ EINA_DEPRECATED EAPI void elm_fileselector_button_path_set(Evas_Object *obj, const char *path) { ELM_FILESELECTOR_INTERFACE_CHECK(obj); - _elm_fileselector_button_path_set_internal(obj, path); + elm_fileselector_path_set(obj, path); } EOLIAN static void @@ -370,7 +371,7 @@ EINA_DEPRECATED EAPI const char * elm_fileselector_button_path_get(const Evas_Object *obj) { ELM_FILESELECTOR_INTERFACE_CHECK(obj, NULL); - return _elm_fileselector_button_path_get_internal(obj); + return elm_fileselector_path_get(obj); } EOLIAN static Efl_Model * @@ -514,6 +515,16 @@ _elm_fileselector_button_elm_interface_fileselector_multi_select_get(Eo *obj EIN return sd->fsd.multi; } +const Eina_List * +_elm_fileselector_button_selected_paths_get_internal(const Evas_Object *obj) +{ + ELM_FILESELECTOR_BUTTON_DATA_GET_OR_RETURN_VAL(obj, sd, NULL); + + if (sd->fs) return elm_fileselector_selected_paths_get(sd->fs); + + return NULL; +} + EOLIAN static const Eina_List* _elm_fileselector_button_elm_interface_fileselector_selected_models_get(Eo *obj EINA_UNUSED, Elm_Fileselector_Button_Data *sd) { @@ -522,12 +533,45 @@ _elm_fileselector_button_elm_interface_fileselector_selected_models_get(Eo *obj return NULL; } +const char * +_elm_fileselector_button_selected_get_internal(const Evas_Object *obj) +{ + ELM_FILESELECTOR_BUTTON_DATA_GET_OR_RETURN_VAL(obj, sd, NULL); + + if (sd->fs) return elm_fileselector_selected_get(sd->fs); + + return sd->fsd.selection_path; +} + EOLIAN static Efl_Model * _elm_fileselector_button_elm_interface_fileselector_selected_model_get(Eo *obj EINA_UNUSED, Elm_Fileselector_Button_Data *sd) { if (sd->fs) return elm_interface_fileselector_selected_model_get(sd->fs); - return NULL; + return sd->fsd.selection; +} + +Eina_Bool +_elm_fileselector_button_selected_set_internal(Evas_Object *obj, const char *_path) +{ + ELM_FILESELECTOR_BUTTON_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE); + Eina_Bool ret = EINA_TRUE; + + if (sd->fs) ret = elm_fileselector_selected_set(sd->fs, _path); + else + { + char *path = ecore_file_realpath(_path); + if (!ecore_file_is_dir(path) && !ecore_file_exists(path)) + { + free(path); + return EINA_FALSE; + } + free(path); + } + + eina_stringshare_replace(&sd->fsd.selection_path, _path); + + return ret; } static void diff --git a/src/lib/elementary/elc_fileselector_entry.c b/src/lib/elementary/elc_fileselector_entry.c index 509f1b3e42..59de0d0d75 100644 --- a/src/lib/elementary/elc_fileselector_entry.c +++ b/src/lib/elementary/elc_fileselector_entry.c @@ -399,8 +399,15 @@ EINA_DEPRECATED EAPI void elm_fileselector_entry_selected_set(Evas_Object *obj, const char *path) { ELM_FILESELECTOR_INTERFACE_CHECK(obj); - ELM_FILESELECTOR_ENTRY_DATA_GET_OR_RETURN(obj, sd); - _elm_fileselector_button_path_set_internal(sd->button, path); + elm_fileselector_selected_set(obj, path); +} + +Eina_Bool +_elm_fileselector_entry_selected_set_internal(Evas_Object *obj, const char *path) +{ + ELM_FILESELECTOR_ENTRY_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE); + elm_fileselector_path_set(sd->button, path); + return EINA_TRUE; } EOLIAN static void @@ -417,8 +424,14 @@ EINA_DEPRECATED EAPI const char * elm_fileselector_entry_selected_get(const Evas_Object *obj) { ELM_FILESELECTOR_INTERFACE_CHECK(obj, NULL); + return elm_fileselector_selected_get((Eo *) obj); +} + +const char * +_elm_fileselector_entry_selected_get_internal(const Evas_Object *obj) +{ ELM_FILESELECTOR_ENTRY_DATA_GET_OR_RETURN_VAL(obj, sd, NULL); - return _elm_fileselector_button_path_get_internal(sd->button); + return elm_fileselector_path_get(sd->button); } EOLIAN static Efl_Model * @@ -466,21 +479,23 @@ elm_fileselector_entry_path_set(Evas_Object *obj, const char *path) { ELM_FILESELECTOR_INTERFACE_CHECK(obj); - _elm_fileselector_entry_path_set_internal(obj, path); + elm_fileselector_path_set(obj, path); } void _elm_fileselector_entry_path_set_internal(Evas_Object *obj, const char *path) { ELM_FILESELECTOR_ENTRY_DATA_GET_OR_RETURN(obj, sd); - char *s = elm_entry_utf8_to_markup(path); + char *s; + + elm_fileselector_path_set(sd->button, path); + + s = elm_entry_utf8_to_markup(path); if (s) { elm_object_text_set(sd->entry, s); free(s); } - - _elm_fileselector_button_path_set_internal(sd->button, path); } static void @@ -516,7 +531,7 @@ EINA_DEPRECATED EAPI const char * elm_fileselector_entry_path_get(const Evas_Object *obj) { ELM_FILESELECTOR_INTERFACE_CHECK(obj, NULL); - return _elm_fileselector_entry_path_get_internal(obj); + return elm_fileselector_path_get(obj); } const char * diff --git a/src/lib/elementary/elm_interface_fileselector.h b/src/lib/elementary/elm_interface_fileselector.h index 1ce059552c..3938e113b6 100644 --- a/src/lib/elementary/elm_interface_fileselector.h +++ b/src/lib/elementary/elm_interface_fileselector.h @@ -23,18 +23,45 @@ _elm_fileselector_path_set_internal(Evas_Object *obj, const char *path); const char * _elm_fileselector_path_get_internal(const Evas_Object *obj); +Eina_Bool +_elm_fileselector_selected_set_internal(Evas_Object *obj, const char *_path); + +const char * +_elm_fileselector_selected_get_internal(const Evas_Object *obj); + +const Eina_List * +_elm_fileselector_selected_paths_get_internal(const Evas_Object* obj); + + void _elm_fileselector_entry_path_set_internal(Evas_Object *obj, const char *path); const char * _elm_fileselector_entry_path_get_internal(const Evas_Object *obj); +Eina_Bool +_elm_fileselector_entry_selected_set_internal(Evas_Object *obj, const char *path); + +const char * +_elm_fileselector_entry_selected_get_internal(const Evas_Object *obj); + + void _elm_fileselector_button_path_set_internal(Evas_Object *obj, const char *path); const char * _elm_fileselector_button_path_get_internal(const Evas_Object *obj); +Eina_Bool +_elm_fileselector_button_selected_set_internal(Evas_Object *obj, const char *_path); + +const char * +_elm_fileselector_button_selected_get_internal(const Evas_Object *obj); + +const Eina_List * +_elm_fileselector_button_selected_paths_get_internal(const Evas_Object *obj); + + void _event_to_legacy_call(Eo *obj, const Efl_Event_Description *evt_desc, void *event_info); diff --git a/src/lib/elementary/elm_widget_fileselector_button.h b/src/lib/elementary/elm_widget_fileselector_button.h index edf6c15a6f..329c941dbe 100644 --- a/src/lib/elementary/elm_widget_fileselector_button.h +++ b/src/lib/elementary/elm_widget_fileselector_button.h @@ -40,6 +40,7 @@ struct _Elm_Fileselector_Button_Data Efl_Model *model; const char *path; Efl_Model *selection; + const char *selection_path; Evas_Coord_Size thumbnail_size; Elm_Fileselector_Mode mode; Elm_Fileselector_Sort sort_type;