more leak--!
authorCarsten Haitzler <raster@rasterman.com>
Mon, 23 Mar 2009 10:19:13 +0000 (10:19 +0000)
committerCarsten Haitzler <raster@rasterman.com>
Mon, 23 Mar 2009 10:19:13 +0000 (10:19 +0000)
SVN revision: 39646

src/bin/e_int_menus.c
src/bin/e_intl.c

index 330091b..2a03d2c 100644 (file)
@@ -60,6 +60,7 @@ static void _e_int_menus_shelves_del_cb(void *data, E_Menu *m, E_Menu_Item *mi);
 static void _e_int_menus_main_showhide(void *data, E_Menu *m, E_Menu_Item *mi);
 static void _e_int_menus_main_restart(void *data, E_Menu *m, E_Menu_Item *mi);
 static void _e_int_menus_main_exit(void *data, E_Menu *m, E_Menu_Item *mi);
+static void _e_int_menus_desktops_free_hook(void *obj);
 static void _e_int_menus_desk_item_cb(void *data, E_Menu *m, E_Menu_Item *mi);
 static void _e_int_menus_item_label_set(Efreet_Menu *entry, E_Menu_Item *mi);
 
@@ -272,6 +273,7 @@ e_int_menus_desktops_new(void)
    e_util_menu_item_theme_icon_set(mi, "preferences-system-windows");
    e_menu_item_callback_set(mi, _e_int_menus_main_showhide, NULL);
 
+   e_object_free_attach_func_set(E_OBJECT(m), _e_int_menus_desktops_free_hook);
    return m;
 }
 
@@ -663,6 +665,21 @@ _e_int_menus_virtuals_pre_cb(void *data, E_Menu *m)
 }
 
 static void
+_e_int_menus_desktops_free_hook(void *obj)
+{
+   E_Menu *m;
+   Eina_List *l;
+   E_Menu_Item *mi;
+
+   m = obj;
+   EINA_LIST_FOREACH(m->items, l, mi)
+     {
+        if (mi->submenu)
+          e_object_del(E_OBJECT(mi->submenu));
+     }
+}
+
+static void
 _e_int_menus_desk_item_cb(void *data, E_Menu *m, E_Menu_Item *mi)
 {
    e_configure_registry_call("screen/virtual_desktops", m->zone->container, NULL);
index 719e668..65c8fe1 100644 (file)
@@ -906,6 +906,7 @@ _e_intl_locale_validate(const char *locale)
 
    /* Match locale with one from the list */
    EINA_LIST_FREE(all_locales, locale_next)
+     {
        if (found == 0)
          {
             E_Locale_Parts *locale_parts_next;
@@ -973,7 +974,9 @@ _e_intl_locale_validate(const char *locale)
             e_intl_locale_parts_free(locale_parts_next);
             E_FREE(locale_lr_next);
          }
-
+        free (locale_next);
+     }
+   
    e_intl_locale_parts_free(locale_parts);
    free(locale_lr);
    E_FREE(locale_cs_canonic);