rimmed pushed a commit to branch master. http://git.enlightenment.org/tools/eflete.git/commit/?id=22cd5868ca462485c5317a3fc7c8f58ab37d9281
commit 22cd5868ca462485c5317a3fc7c8f58ab37d9281 Author: Mykyta Biliavskyi <[email protected]> Date: Wed Aug 17 14:38:59 2016 +0300 Add ___eflete_dummy_sample___ use in programs. Implemented the same behaviour as for dummy image. This will avoid segmentation fault on generation edc. And avoid situations when exported edc file is failed to build. @fix T4331 --- data/Makefile.am | 6 ++++- data/sounds/___eflete_dummy_sample___.wav | Bin 0 -> 8126 bytes src/bin/editor/default.c | 6 ++++- src/bin/editor/editor_program.c | 5 ++++ src/bin/eflete.c | 1 + src/bin/eflete.h | 2 ++ src/bin/project_manager/project_manager.c | 28 +++++++++++++++++++++ src/bin/project_manager/project_manager.h | 2 +- .../project_manager/project_manager_import_edj.c | 2 ++ src/bin/project_manager/project_manager_open.c | 10 +++++++- src/bin/project_manager/project_manager_private.h | 6 +++++ src/bin/ui/property/property_group.c | 27 ++++++++++++++++---- src/bin/ui/sound_manager.c | 1 + src/bin/ui/tab_home_info.c | 2 +- 14 files changed, 88 insertions(+), 10 deletions(-) diff --git a/data/Makefile.am b/data/Makefile.am index 2bf6bc6..2145a70 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -50,6 +50,10 @@ aimages_DATA = \ ${srcdir}/images/eflete.svg \ ${srcdir}/images/toolbar_icons/*.png endif + +asounds_DATA = ${srcdir}/sounds/*.wav +asoundsdir = ${datadir}/eflete/sounds + aresourcesdir = $(datadir)/eflete/ shortcutdir = $(datadir)/applications @@ -137,5 +141,5 @@ color.eet: Makefile $(color_eet_deps) clean-local: rm -f *.edj *.eet -EXTRA_DIST = $(aimages_DATA) $(ewe_deps) $(eflete_deps) $(eflete_elm_deps) \ +EXTRA_DIST = $(aimages_DATA) $(asounds_DATA) $(ewe_deps) $(eflete_deps) $(eflete_elm_deps) \ $(color_eet_deps) $(template_edj_DATA) $(template_edc_DATA) $(template_img_DATA) $(template_snd_DATA) diff --git a/data/sounds/___eflete_dummy_sample___.wav b/data/sounds/___eflete_dummy_sample___.wav new file mode 100644 index 0000000..7fbf38e Binary files /dev/null and b/data/sounds/___eflete_dummy_sample___.wav differ diff --git a/src/bin/editor/default.c b/src/bin/editor/default.c index cb16550..6d31d31 100644 --- a/src/bin/editor/default.c +++ b/src/bin/editor/default.c @@ -446,10 +446,14 @@ EDITOR_PROGRAM_NULL_STRING_RESET(filter_part, "") EDITOR_PROGRAM_NULL_STRING_RESET(filter_state, "") EDITOR_PROGRAM_NULL_STRING_RESET(api_name, NULL) EDITOR_PROGRAM_NULL_STRING_RESET(api_description, NULL) -EDITOR_PROGRAM_NULL_STRING_RESET(sample_name, "") EDITOR_PROGRAM_NULL_STRING_RESET(tone_name, "") EDITOR_PROGRAM_NULL_STRING_RESET(signal, "") EDITOR_PROGRAM_NULL_STRING_RESET(source, "") EDITOR_PROGRAM_NULL_STRING_RESET(state, "") EDITOR_PROGRAM_NULL_STRING_RESET(emit_signal, "") EDITOR_PROGRAM_NULL_STRING_RESET(emit_source, "") + +#define EDITOR_PROGRAM_NOT_NULL_STRING_RESET(FUNC, RESET_VAL) \ +EDITOR_NOT_NULL_STRING_DEFAULT_CHECK(program_##FUNC, EDITOR_PROGRAM_ARGS_PROTO, EDITOR_PROGRAM_ARGS, RESET_VAL) \ +EDITOR_RESET(program_##FUNC, EDITOR_PROGRAM_ARGS_PROTO, EDITOR_PROGRAM_ARGS, RESET_VAL) +EDITOR_PROGRAM_NOT_NULL_STRING_RESET(sample_name, EFLETE_DUMMY_SAMPLE_NAME) diff --git a/src/bin/editor/editor_program.c b/src/bin/editor/editor_program.c index 2431781..d69a566 100644 --- a/src/bin/editor/editor_program.c +++ b/src/bin/editor/editor_program.c @@ -850,6 +850,11 @@ editor_program_add(Evas_Object *edit_object, Change *change, Eina_Bool merge __U CRIT_ON_FAIL(edje_edit_program_add(edit_object, program_name)); CRIT_ON_FAIL(edje_edit_program_action_set(edit_object, program_name, type)); + if (type == EDJE_ACTION_TYPE_SOUND_SAMPLE) + { + edje_edit_program_sample_name_set(edit_object, program_name, EFLETE_DUMMY_SAMPLE_NAME); + } + CRIT_ON_FAIL(editor_save(edit_object)); _editor_project_changed(); diff --git a/src/bin/eflete.c b/src/bin/eflete.c index f498195..fab8db6 100644 --- a/src/bin/eflete.c +++ b/src/bin/eflete.c @@ -99,6 +99,7 @@ app_init() ap.path.layout_edj = eina_stringshare_printf("%s/layouts/eflete.edj", elm_app_data_dir_get()); ap.path.edj_path = eina_stringshare_printf("%s/themes/default/", elm_app_data_dir_get()); ap.path.image_path = eina_stringshare_printf("%s/images/", elm_app_data_dir_get()); + ap.path.sound_path = eina_stringshare_printf("%s/sounds/", elm_app_data_dir_get()); ap.theme = elm_theme_new(); diff --git a/src/bin/eflete.h b/src/bin/eflete.h index 82012be..dcaea44 100644 --- a/src/bin/eflete.h +++ b/src/bin/eflete.h @@ -96,6 +96,7 @@ TODO("delete it, and remake all strings to eina_stringshare or eina_strbuff") #define EFLETE_INTERNAL_GROUP_NAME "___eflete_internal_group___" #define EFLETE_DUMMY_IMAGE_NAME "___eflete_dummy_image___.png" +#define EFLETE_DUMMY_SAMPLE_NAME "___eflete_dummy_sample___.wav" struct _App_Data { @@ -132,6 +133,7 @@ struct _App_Data Eina_Stringshare *layout_edj; Eina_Stringshare *edj_path; Eina_Stringshare *image_path; + Eina_Stringshare *sound_path; Eina_Stringshare *export_edj; } path; Project *project; diff --git a/src/bin/project_manager/project_manager.c b/src/bin/project_manager/project_manager.c index ee9d8f4..a474d17 100644 --- a/src/bin/project_manager/project_manager.c +++ b/src/bin/project_manager/project_manager.c @@ -354,6 +354,34 @@ _project_special_group_add(Project *project) } void +_project_dummy_sample_add(Project *project) +{ + Evas *e; + Evas_Object *edje_edit_obj; + char buf[PATH_MAX]; + + assert(project != NULL); + + THREAD_CONTEXT_SWITCH_BEGIN; + + Ecore_Evas *ee = ecore_evas_buffer_new(0, 0); + e = ecore_evas_get(ee); + edje_edit_obj = edje_edit_object_add(e); + + edje_object_file_set(edje_edit_obj, project->saved_edj, EFLETE_INTERNAL_GROUP_NAME); + snprintf(buf, sizeof(buf), "%s"EFLETE_DUMMY_SAMPLE_NAME, ap.path.sound_path); + assert(edje_edit_sound_sample_add(edje_edit_obj, EFLETE_DUMMY_SAMPLE_NAME, buf) != false); + + you_shall_not_pass_editor_signals(NULL); + CRIT_ON_FAIL(editor_save(edje_edit_obj)); + you_shall_pass_editor_signals(NULL); + evas_object_del(edje_edit_obj); + ecore_evas_free(project->ecore_evas); + + THREAD_CONTEXT_SWITCH_END; +} + +void _project_dummy_image_add(Project *project) { Evas *e; diff --git a/src/bin/project_manager/project_manager.h b/src/bin/project_manager/project_manager.h index 1ef254c..7dc9ba7 100644 --- a/src/bin/project_manager/project_manager.h +++ b/src/bin/project_manager/project_manager.h @@ -38,7 +38,7 @@ #include "resource_manager.h" /* don't forget to update on major changes */ -#define PROJECT_FILE_VERSION 4 +#define PROJECT_FILE_VERSION 5 typedef struct _Enventor_Data Enventor_Data; diff --git a/src/bin/project_manager/project_manager_import_edj.c b/src/bin/project_manager/project_manager_import_edj.c index 1356063..4aa35e0 100644 --- a/src/bin/project_manager/project_manager_import_edj.c +++ b/src/bin/project_manager/project_manager_import_edj.c @@ -135,6 +135,7 @@ _edje_pick_end_cb(void *data, _copy_meta_data_to_pro(ptd); _project_special_group_add(ptd->project); _project_dummy_image_add(ptd->project); + _project_dummy_sample_add(ptd->project); _project_open_internal(ptd); ecore_file_unlink(ptd->source_edj); @@ -252,6 +253,7 @@ _project_import_edj(void *data) _copy_meta_data_to_pro(ptd); _project_special_group_add(ptd->project); _project_dummy_image_add(ptd->project); + _project_dummy_sample_add(ptd->project); _project_open_internal(ptd); msg = eina_stringshare_printf(_("Import finished. Project '%s' created"), ptd->project->name); diff --git a/src/bin/project_manager/project_manager_open.c b/src/bin/project_manager/project_manager_open.c index 79b7cb1..de45de9 100644 --- a/src/bin/project_manager/project_manager_open.c +++ b/src/bin/project_manager/project_manager_open.c @@ -156,7 +156,15 @@ _project_open_feedback_job(void *data, Ecore_Thread *th) _project_dummy_image_add(ptd->project); ptd->project->version = 4; } - TODO("Add crash recovery prompt here") + if (ptd->project->version < 5) /* upgrade to version 4 */ + { + message = eina_stringshare_add(_("Updating project files to version 5")); + ecore_thread_feedback(th, message); + INFO("Updating project files to version 5"); + _project_dummy_sample_add(ptd->project); + ptd->project->version = 5; + } + TODO("Add crash recovery prompt here") pm_project_meta_data_get(ptd->project, &ptd->project->name, NULL, NULL, NULL, NULL); if (!ptd->project->name) diff --git a/src/bin/project_manager/project_manager_private.h b/src/bin/project_manager/project_manager_private.h index 141f3ab..129ebc2 100644 --- a/src/bin/project_manager/project_manager_private.h +++ b/src/bin/project_manager/project_manager_private.h @@ -149,6 +149,12 @@ void _project_special_group_add(Project *project); */ void _project_dummy_image_add(Project *project); +/* Add dummy sound with name ___eflete_dummy_sound___. + * + * @param project - valid struture with global_object. + */ +void _project_dummy_sample_add(Project *project); + /* Copy current edj file into path, that stored for save */ Eina_Bool _project_edj_file_copy(Project_Thread *ptd); diff --git a/src/bin/ui/property/property_group.c b/src/bin/ui/property/property_group.c index bf5422d..983d12c 100644 --- a/src/bin/ui/property/property_group.c +++ b/src/bin/ui/property/property_group.c @@ -1168,7 +1168,7 @@ _sample_combobox_fill(Evas_Object *combo, const char *selected, Eina_Bool with_n itc = evas_object_data_get(combo, "COMMON_ITC"); - if (!selected || strcmp(selected, "")) + if (!selected || strcmp(selected, EFLETE_DUMMY_SAMPLE_NAME)) elm_object_text_set(combo, selected); else elm_object_text_set(combo, STR_NONE); @@ -1193,6 +1193,7 @@ _sample_combobox_fill(Evas_Object *combo, const char *selected, Eina_Bool with_n EINA_LIST_FOREACH(ap.project->sounds, l, sample) { + if (!strcmp(sample->name, EFLETE_DUMMY_SAMPLE_NAME)) continue; combobox_item = mem_malloc(sizeof(Combobox_Item)); combobox_item->index = i++; combobox_item->data = eina_stringshare_add(sample->name); @@ -2412,6 +2413,11 @@ _update_cb(Property_Attribute *pa, Property_Action *action) case ATTRIBUTE_PROGRAM_SAMPLE_NAME: elm_genlist_clear(action->control); str_val1 = edje_edit_program_sample_name_get(EDIT_OBJ, PROGRAM_ARGS); + if (!strcmp(str_val1, EFLETE_DUMMY_SAMPLE_NAME)) + { + edje_edit_string_free(str_val1); + str_val1 = eina_stringshare_add(_("None")); + } _sample_combobox_fill(action->control, str_val1, 1); edje_edit_string_free(str_val1); return editor_program_sample_name_default_is(EDIT_OBJ, PROGRAM_ARGS); @@ -3084,8 +3090,16 @@ _start_cb(Property_Attribute *pa, Property_Action *action) break; case ATTRIBUTE_PROGRAM_SAMPLE_NAME: group_pd.history.format = _("program's sample changed from \"%s\" to \"%s\""); - STR_VAL(str_val1, edje_edit_program_sample_name_get(EDIT_OBJ, PROGRAM_ARGS)); - break; + + tmp_str_val1 = edje_edit_program_sample_name_get(EDIT_OBJ, PROGRAM_ARGS); + assert(tmp_str_val1 != NULL); + if (!strcmp(tmp_str_val1, EFLETE_DUMMY_SAMPLE_NAME)) + { + edje_edit_string_free(tmp_str_val1); + tmp_str_val1 = eina_stringshare_add(_("None")); + } + STR_VAL(str_val1, tmp_str_val1); + break; case ATTRIBUTE_PROGRAM_TONE_NAME: group_pd.history.format = _("program's tone changed from \"%s\" to \"%s\""); STR_VAL(str_val1, edje_edit_program_tone_name_get(EDIT_OBJ, PROGRAM_ARGS)); @@ -4064,8 +4078,11 @@ _change_cb(Property_Attribute *pa, Property_Action *action) } else { - str_val1 = (cb_item_combo->index != 0) ? eina_stringshare_add(cb_item_combo->data) : ""; - CRIT_ON_FAIL(editor_program_sample_name_set(EDIT_OBJ, CHANGE_NO_MERGE, PROGRAM_ARGS, str_val1)); + str_val1 = eina_stringshare_add(cb_item_combo->data); + if (!strcmp(str_val1, STR_NONE)) + CRIT_ON_FAIL(editor_program_sample_name_set(EDIT_OBJ, CHANGE_NO_MERGE, PROGRAM_ARGS, EFLETE_DUMMY_SAMPLE_NAME)); + else + CRIT_ON_FAIL(editor_program_sample_name_set(EDIT_OBJ, CHANGE_NO_MERGE, PROGRAM_ARGS, str_val1)); eina_stringshare_del(group_pd.history.new.str_val1); group_pd.history.new.str_val1 = str_val1; } diff --git a/src/bin/ui/sound_manager.c b/src/bin/ui/sound_manager.c index 9c3c6e4..e46c79a 100644 --- a/src/bin/ui/sound_manager.c +++ b/src/bin/ui/sound_manager.c @@ -172,6 +172,7 @@ _sound_manager_init(void) elm_gengrid_item_append(mng.gengrid, ggic, snd, NULL, NULL); EINA_LIST_FOREACH(ap.project->sounds, l, sample) { + if (!strcmp(sample->name, EFLETE_DUMMY_SAMPLE_NAME)) continue; snd = (Sound_Data *)mem_calloc(1, sizeof(Sound_Data)); snd->name = eina_stringshare_ref(sample->name); snd->type_label = _sound_format_get(sample->source); diff --git a/src/bin/ui/tab_home_info.c b/src/bin/ui/tab_home_info.c index 233f12d..8f826d4 100644 --- a/src/bin/ui/tab_home_info.c +++ b/src/bin/ui/tab_home_info.c @@ -73,7 +73,7 @@ _tab_project_update() pm_project_meta_data_get(ap.project, NULL, &authors, &version, &license, &comment); _info_set(false, ap.project->name, ap.project->pro_path, eina_list_count(ap.project->images) - 1, /* dummy image should not be counted */ - eina_list_count(ap.project->sounds) + eina_list_count(ap.project->tones), + eina_list_count(ap.project->sounds) + eina_list_count(ap.project->tones) - 1,/* dummy sample should not be counted */ eina_list_count(ap.project->fonts), authors, version, license, comment); } --
