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