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;