Enlightenment CVS committal

Author  : raster
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_int_menus.c e_int_menus.h e_object.c e_object.h e_zone.c 


Log Message:


fix main int menus to fre, del, cleanup, not leak and work properly

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_int_menus.c,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -3 -r1.29 -r1.30
--- e_int_menus.c       12 Jan 2005 08:45:28 -0000      1.29
+++ e_int_menus.c       12 Jan 2005 09:22:44 -0000      1.30
@@ -15,13 +15,13 @@
 };
 
 /* local subsystem functions */
-static void _e_int_menus_main_end            (void *data, E_Menu *m);
+static void _e_int_menus_main_del_hook       (void *obj);
 static void _e_int_menus_main_about          (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_apps_scan           (E_Menu *m);
 static void _e_int_menus_apps_start          (void *data, E_Menu *m);
-static void _e_int_menus_apps_end            (void *data, E_Menu *m);
+static void _e_int_menus_apps_del_hook       (void *obj);
 static void _e_int_menus_apps_free_hook      (void *obj);
 static void _e_int_menus_apps_run            (void *data, E_Menu *m, 
E_Menu_Item *mi);
 static void _e_int_menus_clients_pre_cb      (void *data, E_Menu *m);
@@ -45,10 +45,10 @@
    dat = calloc(1, sizeof(Main_Data));
    m = e_menu_new();
    dat->menu = m;
+   e_object_data_set(E_OBJECT(m), dat);   
+   e_object_del_attach_func_set(E_OBJECT(m), _e_int_menus_main_del_hook);
    
-   e_menu_post_deactivate_callback_set(m, _e_int_menus_main_end, dat);
-   
-   subm = e_int_menus_favorite_apps_new(0);
+   subm = e_int_menus_favorite_apps_new();
    dat->apps = subm;
    mi = e_menu_item_new(m);
    e_menu_item_label_set(mi, "Favorite Applications");
@@ -110,7 +110,7 @@
 }
 
 E_Menu *
-e_int_menus_apps_new(char *dir, int top)
+e_int_menus_apps_new(char *dir)
 {
    E_Menu *m;
    E_App *a;
@@ -119,11 +119,8 @@
    a = e_app_new(dir, 0);
    e_object_data_set(E_OBJECT(m), a);
    e_menu_pre_activate_callback_set(m, _e_int_menus_apps_start, NULL);
-   if (top)
-     {
-       e_menu_post_deactivate_callback_set(m, _e_int_menus_apps_end, NULL);
-       e_object_free_attach_func_set(E_OBJECT(m), _e_int_menus_apps_free_hook);
-     }
+   e_object_del_attach_func_set(E_OBJECT(m), _e_int_menus_apps_del_hook);
+   e_object_free_attach_func_set(E_OBJECT(m), _e_int_menus_apps_free_hook);
    return m;
 }
 
@@ -139,7 +136,7 @@
    
 
 E_Menu *
-e_int_menus_favorite_apps_new(int top)
+e_int_menus_favorite_apps_new(void)
 {
    E_Menu *m;
    char buf[4096];
@@ -149,7 +146,7 @@
    if (homedir)
      {
        snprintf(buf, sizeof(buf), "%s/.e/e/applications/favorite", homedir);
-       m = e_int_menus_apps_new(buf, top);
+       m = e_int_menus_apps_new(buf);
        free(homedir);
        return m;
      }
@@ -168,17 +165,21 @@
 
 /* local subsystem functions */
 static void
-_e_int_menus_main_end(void *data, E_Menu *m)
+_e_int_menus_main_del_hook(void *obj)
 {
    Main_Data *dat;
+   E_Menu *m;
    
-   dat = data;
-   e_object_del(E_OBJECT(dat->apps));
-   e_object_del(E_OBJECT(dat->modules));
-   e_object_del(E_OBJECT(dat->desktops));
-   e_object_del(E_OBJECT(dat->clients));
-   e_object_del(E_OBJECT(m));
-   free(dat);
+   m = obj;
+   dat = e_object_data_get(E_OBJECT(obj));
+   if (dat)
+     {
+       e_object_del(E_OBJECT(dat->apps));
+       e_object_del(E_OBJECT(dat->modules));
+       e_object_del(E_OBJECT(dat->desktops));
+       e_object_del(E_OBJECT(dat->clients));
+       free(dat);
+     }
 }
 
 static void
@@ -235,7 +236,7 @@
             
             snprintf(buf, sizeof(buf), "%s/.directory.eet", a->path);
             e_menu_item_icon_edje_set(mi, buf, "icon");
-            e_menu_item_submenu_set(mi, e_int_menus_apps_new(a->path, 0));
+            e_menu_item_submenu_set(mi, e_int_menus_apps_new(a->path));
             app_count++;
          }
      }
@@ -254,19 +255,19 @@
 }
 
 static void
-_e_int_menus_apps_end(void *data, E_Menu *m)
+_e_int_menus_apps_del_hook(void *obj)
 {
+   E_Menu *m;
    Evas_List *l;
    
+   m = obj;
    for (l = m->items; l; l = l->next)
      {
        E_Menu_Item *mi;
        
        mi = l->data;
-       if (mi->submenu)
-         _e_int_menus_apps_end(NULL, mi->submenu);
+       if (mi->submenu) e_object_del(mi->submenu);
      }
-   e_object_del(E_OBJECT(m));
 }
 
 static void
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_int_menus.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- e_int_menus.h       3 Jan 2005 09:34:24 -0000       1.6
+++ e_int_menus.h       12 Jan 2005 09:22:44 -0000      1.7
@@ -4,7 +4,7 @@
 EAPI E_Menu *e_int_menus_main_new(void);    
 EAPI E_Menu *e_int_menus_desktops_new(void);
 EAPI E_Menu *e_int_menus_clients_new(void);
-EAPI E_Menu *e_int_menus_apps_new(char *dir, int top);
-EAPI E_Menu *e_int_menus_favorite_apps_new(int top);
+EAPI E_Menu *e_int_menus_apps_new(char *dir);
+EAPI E_Menu *e_int_menus_favorite_apps_new(void);
     
 #endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_object.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- e_object.c  3 Jan 2005 22:04:04 -0000       1.3
+++ e_object.c  12 Jan 2005 09:22:44 -0000      1.4
@@ -45,6 +45,7 @@
 {
    E_OBJECT_CHECK(obj);
    obj->deleted = 1;
+   if (obj->del_att_func) obj->del_att_func(obj);
    if (obj->del_func) obj->del_func(obj);
    e_object_unref(obj);
 }
@@ -67,7 +68,7 @@
 e_object_free(E_Object *obj)
 {
    E_OBJECT_CHECK(obj);
-   if (obj->func) obj->func(obj);
+   if (obj->free_att_func) obj->free_att_func(obj);
    obj->magic = E_OBJECT_MAGIC_FREED;
    obj->cleanup_func(obj);
 }
@@ -217,7 +218,14 @@
 e_object_free_attach_func_set(E_Object *obj, void (*func) (void *obj))
 {
    E_OBJECT_CHECK(obj);
-   obj->func = func;
+   obj->free_att_func = func;
+}
+
+void
+e_object_del_attach_func_set(E_Object *obj, void (*func) (void *obj))
+{
+   E_OBJECT_CHECK(obj);
+   obj->del_att_func = func;
 }
 
 #ifdef OBJECT_PARANOIA_CHECK
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_object.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- e_object.h  4 Jan 2005 01:32:23 -0000       1.8
+++ e_object.h  12 Jan 2005 09:22:44 -0000      1.9
@@ -50,7 +50,8 @@
    int                     references;
    E_Object_Cleanup_Func   del_func;
    E_Object_Cleanup_Func   cleanup_func;
-   void                  (*func) (void *obj);
+   void                  (*free_att_func) (void *obj);
+   void                  (*del_att_func) (void *obj);
    void                   *data;
    unsigned char           deleted : 1;
 };
@@ -67,5 +68,6 @@
 EAPI void  e_object_data_set            (E_Object *obj, void *data);
 EAPI void *e_object_data_get            (E_Object *obj);
 EAPI void  e_object_free_attach_func_set(E_Object *obj, void (*func) (void 
*obj));
+EAPI void  e_object_del_attach_func_set (E_Object *obj, void (*func) (void 
*obj));
 
 #endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_zone.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -3 -r1.14 -r1.15
--- e_zone.c    11 Jan 2005 13:43:00 -0000      1.14
+++ e_zone.c    12 Jan 2005 09:22:44 -0000      1.15
@@ -8,6 +8,7 @@
  */
 
 static void _e_zone_free(E_Zone *zone);
+static void _e_zone_cb_menu_end(void *data, E_Menu *m);
 static void _e_zone_cb_bg_mouse_down(void *data, Evas *evas, Evas_Object *obj, 
void *event_info);
 static void _e_zone_cb_bg_mouse_up(void *data, Evas *evas, Evas_Object *obj, 
void *event_info);
 static void _e_zone_cb_bg_mouse_move(void *data, Evas *evas, Evas_Object *obj, 
void *event_info);
@@ -207,6 +208,12 @@
 }
 
 static void
+_e_zone_cb_menu_end(void *data, E_Menu *m)
+{
+   e_object_del(E_OBJECT(m));
+}
+
+static void
 _e_zone_cb_bg_mouse_down(void *data, Evas *evas, Evas_Object *obj, void 
*event_info)
 {
    E_Zone *zone;
@@ -221,6 +228,7 @@
        E_Menu *m;
        
        m = e_int_menus_main_new();
+       e_menu_post_deactivate_callback_set(m, _e_zone_cb_menu_end, NULL);
        e_menu_activate_mouse(m, zone, ev->output.x, ev->output.y, 1, 1,
                              E_MENU_POP_DIRECTION_DOWN);
        e_util_container_fake_mouse_up_all_later(zone->container);
@@ -232,6 +240,7 @@
        m = e_int_menus_clients_new();
        /* FIXME: this is a bit of a hack... setting m->con - bad hack */
        m->zone = zone;
+       e_menu_post_deactivate_callback_set(m, _e_zone_cb_menu_end, NULL);
        e_menu_activate_mouse(m, zone, ev->output.x, ev->output.y, 1, 1,
                              E_MENU_POP_DIRECTION_DOWN);
        e_util_container_fake_mouse_up_all_later(zone->container);
@@ -240,7 +249,8 @@
      {
        E_Menu *m;
        
-       m = e_int_menus_favorite_apps_new(1);
+       m = e_int_menus_favorite_apps_new();
+       e_menu_post_deactivate_callback_set(m, _e_zone_cb_menu_end, NULL);
        e_menu_activate_mouse(m, zone, ev->output.x, ev->output.y, 1, 1,
                              E_MENU_POP_DIRECTION_DOWN);
        e_util_container_fake_mouse_up_all_later(zone->container);




-------------------------------------------------------
The SF.Net email is sponsored by: Beat the post-holiday blues
Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek.
It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to