Enlightenment CVS committal

Author  : dj2
Project : e17
Module  : libs/ewl

Dir     : e17/libs/ewl/src/lib


Modified Files:
        ewl_fileselector.c ewl_fileselector.h 


Log Message:
- clean up some memory leaks
  - need to cleanup the data stuck into the widget on distroy
- drop some unneeded casts

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/lib/ewl_fileselector.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- ewl_fileselector.c  11 Feb 2005 18:19:27 -0000      1.4
+++ ewl_fileselector.c  11 Feb 2005 18:59:37 -0000      1.5
@@ -475,13 +475,14 @@
 void ewl_fileselector_select_file_cb(Ewl_Widget * w, void *ev_data, void *data)
 {
        Ewl_Fileselector *fs;
-       Ewl_Fileselector_Data *d = NULL;
+       char *name = NULL;
 
        fs = data;
-       d = (Ewl_Fileselector_Data *) ewl_widget_data_get(EWL_WIDGET(w), 
"FILE");
+       name = ewl_widget_data_get(w, "FILESELECTOR_FILE");
+
        IF_FREE(fs->file);
-       fs->file = strdup( d->name );
-       ewl_entry_text_set(EWL_ENTRY(fs->entry_file), d->name);
+       fs->file = strdup(name);
+       ewl_entry_text_set(EWL_ENTRY(fs->entry_file), name);
 }
 
 void ewl_fileselector_select_dir_cb(Ewl_Widget * w, void *ev_data, void *data)
@@ -491,14 +492,16 @@
        char *new_path;
 
        fs = data;
-       path = (char *) ewl_widget_data_get(EWL_WIDGET(w), "DIR");
+       path = ewl_widget_data_get(w, "FILESELECTOR_DIR");
+
        if (!strcmp(path, ".."))
                new_path = ewl_fileselector_path_up_get(fs->path);
        else
                new_path = ewl_fileselector_str_append(fs->path, path);
        path = ewl_fileselector_str_append(new_path, "/");
-       free(new_path);
-       ewl_fileselector_path_setup(EWL_FILESELECTOR(fs), path);
+       FREE(new_path);
+
+       ewl_fileselector_path_setup(fs, path);
 }
 
 void ewl_fileselector_go_up_cb(Ewl_Widget * w, void *ev_data, void *data)
@@ -560,9 +563,8 @@
 
        parent_win = EWL_WIDGET(ewl_embed_widget_find(EWL_WIDGET(fs)));
        cont = ewl_container_redirect_get(EWL_CONTAINER(parent_win));
-       if (cont) {
+       if (cont) 
                ewl_container_redirect_set(EWL_CONTAINER(parent_win), NULL);
-       }
 
        title = malloc(PATH_MAX);
        if (!title) {
@@ -577,13 +579,14 @@
                prow = ewl_tree_text_row_add(EWL_TREE(fs->list_files),
                                             NULL, &d->name);
 
-               ewl_widget_data_set(EWL_WIDGET(prow), "FILE", d);
-
-               ewl_fileselector_tooltip_add(EWL_WIDGET(prow), d);
+               ewl_widget_data_set(prow, "FILESELECTOR_FILE", strdup(d->name));
+               ewl_fileselector_tooltip_add(prow, d);
+               ewl_fileselector_data_free(d);
 
-               ewl_callback_append(EWL_WIDGET(prow),
-                                   EWL_CALLBACK_CLICKED,
+               ewl_callback_append(prow, EWL_CALLBACK_CLICKED,
                                    ewl_fileselector_select_file_cb, fs);
+               ewl_callback_append(prow, EWL_CALLBACK_DESTROY,
+                               ewl_fileselector_file_data_cleanup_cb, NULL);
 
                ecore_list_next(files);
        }
@@ -605,15 +608,15 @@
                ewl_widget_show(label);
                ewl_widget_show(hbox);
 
-               prow =
-                   ewl_tree_row_add(EWL_TREE(fs->list_dirs), NULL, &hbox);
-               ewl_widget_data_set(EWL_WIDGET(prow), "DIR", d->name);
+               prow = ewl_tree_row_add(EWL_TREE(fs->list_dirs), NULL, &hbox);
+               ewl_widget_data_set(prow, "FILESELECTOR_DIR", strdup(d->name));
+               ewl_fileselector_tooltip_add(prow, ecore_list_current(dirs));
+               ewl_fileselector_data_free(d);
 
-               ewl_fileselector_tooltip_add(EWL_WIDGET(prow),
-                                  ecore_list_current(dirs));
-
-               ewl_callback_append(EWL_WIDGET(prow), EWL_CALLBACK_CLICKED,
+               ewl_callback_append(prow, EWL_CALLBACK_CLICKED,
                                    ewl_fileselector_select_dir_cb, fs);
+               ewl_callback_append(prow, EWL_CALLBACK_DESTROY,
+                               ewl_fileselector_dir_data_cleanup_cb, NULL);
 
                ecore_list_next(dirs);
        }
@@ -697,3 +700,21 @@
        FREE(perm);
 }
 
+static void
+ewl_fileselector_file_data_cleanup_cb(Ewl_Widget *w, void *ev, void *data)
+{
+       char *v;
+
+       v = ewl_widget_data_get(w, "FILESELECTOR_FILE");
+       IF_FREE(v);
+}
+
+static void
+ewl_fileselector_dir_data_cleanup_cb(Ewl_Widget *w, void *ev, void *data)
+{
+       char *v;
+
+       v = ewl_widget_data_get(w, "FILESELECTOR_DIR");
+       IF_FREE(v);
+}
+
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/lib/ewl_fileselector.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- ewl_fileselector.h  11 Feb 2005 18:10:53 -0000      1.3
+++ ewl_fileselector.h  11 Feb 2005 18:59:50 -0000      1.4
@@ -67,6 +67,8 @@
 void ewl_fileselector_go_up_cb(Ewl_Widget *w, void *ev_data, void *data);
 void ewl_fileselector_go_home_cb(Ewl_Widget *w, void *ev_data, void *data);
 void ewl_fileselector_filter_cb(Ewl_Widget *entry, void *ev_data, void 
*user_data);
+void ewl_fileselector_dir_data_cleanup_cb(Ewl_Widget *entry, void *ev_data, 
void *user_data);
+void ewl_fileselector_file_data_cleanup_cb(Ewl_Widget *entry, void *ev_data, 
void *user_data);
 
 /* Private: data for a file */
 




-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to