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);

-- 


Reply via email to