rimmed pushed a commit to branch master. http://git.enlightenment.org/tools/eflete.git/commit/?id=ad89c7b9e2c30c7df86f092eac7ceaec3362b499
commit ad89c7b9e2c30c7df86f092eac7ceaec3362b499 Author: Mykyta Biliavskyi <[email protected]> Date: Thu Jul 14 12:14:59 2016 +0300 Validator: add ability to free validators. Manage validators allocation and free inside modules, that uses entry with validating functionality. @fix T4060 --- src/bin/ui/main_window.c | 1 + src/bin/ui/property/property.c | 13 +++++++++++++ src/bin/ui/property/property_group.c | 11 +++++++++++ src/bin/ui/property/property_private.h | 3 +++ src/bin/ui/sound_manager.c | 2 ++ src/bin/ui/style_manager.c | 8 +++++--- src/bin/ui/tab_home_import_edc.c | 10 ++++++++++ src/bin/ui/tab_home_import_edj.c | 11 +++++++++++ src/bin/ui/tab_home_new.c | 11 +++++++++++ src/bin/ui/workspace/group_navigator.c | 5 +++++ 10 files changed, 72 insertions(+), 3 deletions(-) diff --git a/src/bin/ui/main_window.c b/src/bin/ui/main_window.c index 48f3094..98a9c15 100644 --- a/src/bin/ui/main_window.c +++ b/src/bin/ui/main_window.c @@ -62,6 +62,7 @@ ui_main_window_del(void) cursor_main_free(); config_save(); + evas_object_del(ap.property.group); INFO("%s %s - Finished...", PACKAGE_NAME, VERSION); elm_exit(); diff --git a/src/bin/ui/property/property.c b/src/bin/ui/property/property.c index 6deb75d..546a8f3 100644 --- a/src/bin/ui/property/property.c +++ b/src/bin/ui/property/property.c @@ -157,6 +157,18 @@ _unrealized_cb(void *data, elm_object_focus_set(pd->genlist, true); } +void +_property_del(void *data, + Evas *e __UNUSED__, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + Property_Mode *pd = (Property_Mode *)data; + + property_group_del(); + free(pd); +} + Evas_Object * property_add(Evas_Object *parent, Property_Mode mode) { @@ -239,6 +251,7 @@ property_add(Evas_Object *parent, Property_Mode mode) _items_add(pd->genlist, &items, NULL); GENLIST_FILTER_APPLY(pd->genlist); + evas_object_event_callback_add(pd->layout, EVAS_CALLBACK_DEL, _property_del, pd); return pd->layout; } diff --git a/src/bin/ui/property/property_group.c b/src/bin/ui/property/property_group.c index 4e592a8..d6e930b 100644 --- a/src/bin/ui/property/property_group.c +++ b/src/bin/ui/property/property_group.c @@ -5664,6 +5664,17 @@ _init_items() /* public */ void +property_group_del(void) +{ + if (group_pd.part_name_validator) + resource_name_validator_free(group_pd.part_name_validator); + if (group_pd.group_data_name_validator) + resource_name_validator_free(group_pd.group_data_name_validator); + group_pd.part_name_validator = NULL; + group_pd.group_data_name_validator = NULL; +} + +void property_group_init(Property_Data *pd) { assert(pd != NULL); diff --git a/src/bin/ui/property/property_private.h b/src/bin/ui/property/property_private.h index 2a190e7..f8fb018 100644 --- a/src/bin/ui/property/property_private.h +++ b/src/bin/ui/property/property_private.h @@ -575,6 +575,9 @@ property_dummy_items_get(void); /* property group */ void +property_group_del(void); + +void property_group_init(Property_Data *pd); Eina_List * diff --git a/src/bin/ui/sound_manager.c b/src/bin/ui/sound_manager.c index ab4fd11..41920a4 100644 --- a/src/bin/ui/sound_manager.c +++ b/src/bin/ui/sound_manager.c @@ -383,6 +383,8 @@ _tone_add_cb(void *data __UNUSED__, _tone_add(); close: + resource_name_validator_free(mng.tone_validator); + elm_validator_regexp_free(mng.frq_validator); evas_object_del(mng.box); } diff --git a/src/bin/ui/style_manager.c b/src/bin/ui/style_manager.c index c6bd474..ddfceac 100644 --- a/src/bin/ui/style_manager.c +++ b/src/bin/ui/style_manager.c @@ -169,9 +169,6 @@ _add_style_content_get(void *data __UNUSED__, Evas_Object **to_focus) LAYOUT_PROP_ADD(mng.win, _("Style name:"), "popup", "1swallow"); mng.popup.item = item; - if (!mng.popup.validator) - mng.popup.validator = resource_name_validator_new(NAME_REGEX, NULL); - resource_name_validator_list_set(mng.popup.validator, &ap.project->styles, true); ENTRY_ADD(mng.popup.item, mng.popup.name, true); eo_event_callback_add(mng.popup.name, ELM_ENTRY_EVENT_VALIDATE, resource_name_validator_helper, mng.popup.validator); evas_object_smart_callback_add(mng.popup.name, "changed", _validate, NULL); @@ -193,6 +190,9 @@ _style_add_cb(void *data __UNUSED__, Popup_Button btn_res; const char *style_name; Elm_Object_Item *glit; + if (!mng.popup.validator) + mng.popup.validator = resource_name_validator_new(NAME_REGEX, NULL); + resource_name_validator_list_set(mng.popup.validator, &ap.project->styles, true); btn_res = popup_want_action(_("Add textblock style"), NULL, _add_style_content_get, BTN_OK|BTN_CANCEL, @@ -226,6 +226,7 @@ _style_add_cb(void *data __UNUSED__, ap.project->changed = true; close: + resource_name_validator_free(mng.popup.validator); evas_object_del(mng.popup.item); } @@ -315,6 +316,7 @@ close: EINA_LIST_FREE(resources, res) resource_free(res); evas_object_del(mng.popup.item); + resource_name_validator_free(mng.popup.validator); eina_stringshare_del(buf); } diff --git a/src/bin/ui/tab_home_import_edc.c b/src/bin/ui/tab_home_import_edc.c index 10276a3..a14ad58 100644 --- a/src/bin/ui/tab_home_import_edc.c +++ b/src/bin/ui/tab_home_import_edc.c @@ -458,6 +458,15 @@ _import(void *data __UNUSED__, evas_object_show(ap.splash); } +void +_tab_import_edc_del(void *data __UNUSED__, + Evas *e __UNUSED__, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + elm_validator_regexp_free(tab_edc.name_validator); +} + Evas_Object * _tab_import_edc_add(void) { @@ -580,6 +589,7 @@ _tab_import_edc_add(void) tab_edc.log = eina_strbuf_new(); evas_object_event_callback_add(tab_edc.layout, EVAS_CALLBACK_SHOW, _tab_default_focus, tab_edc.name); + evas_object_event_callback_add(tab_edc.layout, EVAS_CALLBACK_DEL, _tab_import_edc_del, NULL); return tab_edc.layout; } diff --git a/src/bin/ui/tab_home_import_edj.c b/src/bin/ui/tab_home_import_edj.c index 8442c75..d6e55bb 100644 --- a/src/bin/ui/tab_home_import_edj.c +++ b/src/bin/ui/tab_home_import_edj.c @@ -580,6 +580,16 @@ _combobox_item_del(void *data, eina_stringshare_del(data); } +void +_tab_import_edj_del(void *data __UNUSED__, + Evas *e __UNUSED__, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + elm_validator_regexp_free(tab_edj.name_validator); +} + + Evas_Object * _tab_import_edj_add(void) { @@ -652,6 +662,7 @@ _tab_import_edj_add(void) evas_object_smart_callback_add(tab_edj.genlist, "contracted", _contracted_cb, NULL); elm_object_part_content_set(tab_edj.layout, "swallow.widgets", tab_edj.genlist); + evas_object_event_callback_add(tab_edj.layout, EVAS_CALLBACK_DEL, _tab_import_edj_del, NULL); return tab_edj.layout; } diff --git a/src/bin/ui/tab_home_new.c b/src/bin/ui/tab_home_new.c index d52e05d..a2e926f 100644 --- a/src/bin/ui/tab_home_new.c +++ b/src/bin/ui/tab_home_new.c @@ -572,6 +572,16 @@ _elipsis(void *data __UNUSED__, false); } +void +_tab_new_del(void *data __UNUSED__, + Evas *e __UNUSED__, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + elm_validator_regexp_free(tab_new.name_validator); +} + + Evas_Object * _tab_new_project_add(void) { @@ -627,6 +637,7 @@ _tab_new_project_add(void) elm_object_part_content_set(tab_new.layout, "swallow.widgets", tab_new.genlist); evas_object_event_callback_add(tab_new.layout, EVAS_CALLBACK_SHOW, _tab_default_focus, tab_new.name); + evas_object_event_callback_add(tab_new.layout, EVAS_CALLBACK_DEL, _tab_new_del, NULL); return tab_new.layout; } diff --git a/src/bin/ui/workspace/group_navigator.c b/src/bin/ui/workspace/group_navigator.c index 2580746..0f5dccc 100644 --- a/src/bin/ui/workspace/group_navigator.c +++ b/src/bin/ui/workspace/group_navigator.c @@ -2487,6 +2487,11 @@ _group_navigator_del(void *data, evas_object_data_del(pl->menu, GROUP_NAVIGATOR_DATA); evas_object_data_del(pl->genlist, GROUP_NAVIGATOR_DATA); + resource_name_validator_free(pl->part_name_validator); + resource_name_validator_free(pl->program_name_validator); + resource_name_validator_free(pl->group_data_name_validator); + elm_validator_regexp_free(pl->name_validator); + pl->group = NULL; free(pl); --
