Enlightenment CVS committal Author : jethomas Project : e17 Module : libs/ewl
Dir : e17/libs/ewl/src/lib Modified Files: ewl_combo.c ewl_filelist.c ewl_filepicker.c ewl_filepicker.h Log Message: - Don't enter directory we don't have permission to read - Fix various memory leaks =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_combo.c,v retrieving revision 1.63 retrieving revision 1.64 diff -u -3 -r1.63 -r1.64 --- ewl_combo.c 12 Nov 2007 22:42:22 -0000 1.63 +++ ewl_combo.c 17 Nov 2007 00:01:55 -0000 1.64 @@ -353,6 +353,8 @@ item = view->fetch(model->fetch(mvc_data, idx->row, 0), idx->row, 0); } + + FREE(idx); } else if (view->header_fetch) =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_filelist.c,v retrieving revision 1.40 retrieving revision 1.41 diff -u -3 -r1.40 -r1.41 --- ewl_filelist.c 16 Nov 2007 18:50:57 -0000 1.40 +++ ewl_filelist.c 17 Nov 2007 00:01:55 -0000 1.41 @@ -258,8 +258,10 @@ if (dir == NULL) fl->directory = NULL; - else if ((!fl->directory) || (strcmp(dir, fl->directory))) + else if (((!fl->directory) || (strcmp(dir, fl->directory))) + && (ecore_file_can_read(dir))) { + IF_FREE(fl->directory); fl->directory = strdup(dir); data = ewl_mvc_data_get(EWL_MVC(fl->controller)); =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_filepicker.c,v retrieving revision 1.37 retrieving revision 1.38 diff -u -3 -r1.37 -r1.38 --- ewl_filepicker.c 14 Nov 2007 20:07:59 -0000 1.37 +++ ewl_filepicker.c 17 Nov 2007 00:01:55 -0000 1.38 @@ -81,8 +81,6 @@ ewl_filepicker_init(Ewl_Filepicker *fp) { Ewl_Widget *o, *box; - Ewl_Model *model; - Ewl_View *view; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR_RET(fp, FALSE); @@ -99,23 +97,27 @@ ewl_object_preferred_inner_size_set(EWL_OBJECT(fp), 400, 300); - model = ewl_model_ecore_list_get(); + fp->mvc_path.model = ewl_model_ecore_list_get(); - view = ewl_label_view_get(); + fp->mvc_path.view = ewl_label_view_get(); fp->path = ecore_list_new(); ecore_list_free_cb_set(fp->path, ECORE_FREE_CB(free)); - fp->path_combo = ewl_combo_new(); - ewl_container_child_append(EWL_CONTAINER(fp), fp->path_combo); - ewl_mvc_model_set(EWL_MVC(fp->path_combo), model); - ewl_mvc_view_set(EWL_MVC(fp->path_combo), view); - ewl_mvc_data_set(EWL_MVC(fp->path_combo), fp->path); - ewl_callback_append(fp->path_combo, EWL_CALLBACK_VALUE_CHANGED, - ewl_filepicker_cb_path_change, fp); - ewl_object_fill_policy_set(EWL_OBJECT(fp->path_combo), + fp->mvc_path.combo = ewl_combo_new(); + ewl_container_child_append(EWL_CONTAINER(fp), + fp->mvc_path.combo); + ewl_mvc_model_set(EWL_MVC(fp->mvc_path.combo), + fp->mvc_path.model); + ewl_mvc_view_set(EWL_MVC(fp->mvc_path.combo), + fp->mvc_path.view); + ewl_mvc_data_set(EWL_MVC(fp->mvc_path.combo), fp->path); + ewl_callback_append(fp->mvc_path.combo, + EWL_CALLBACK_VALUE_CHANGED, + ewl_filepicker_cb_path_change, fp); + ewl_object_fill_policy_set(EWL_OBJECT(fp->mvc_path.combo), EWL_FLAG_FILL_HFILL | EWL_FLAG_FILL_VSHRINK); - ewl_widget_show(fp->path_combo); + ewl_widget_show(fp->mvc_path.combo); o = ewl_hbox_new(); ewl_container_child_append(EWL_CONTAINER(fp), o); @@ -149,28 +151,36 @@ fp->filters = ecore_list_new(); ecore_list_free_cb_set(fp->filters, - ECORE_FREE_CB(ewl_filepicker_filter_free_cb)); + ECORE_FREE_CB(ewl_filepicker_filter_free_cb)); ewl_filepicker_filter_add(fp, "All files", NULL); - model = ewl_model_new(); - ewl_model_data_fetch_set(model, ewl_filepicker_cb_type_fetch); - ewl_model_data_count_set(model, ewl_filepicker_cb_type_count); - - view = ewl_view_clone(ewl_label_view_get()); - ewl_view_header_fetch_set(view, ewl_filepicker_cb_type_header); - - fp->type_combo = ewl_combo_new(); - ewl_mvc_model_set(EWL_MVC(fp->type_combo), model); - ewl_mvc_view_set(EWL_MVC(fp->type_combo), view); - ewl_mvc_data_set(EWL_MVC(fp->type_combo), fp); - ewl_mvc_selected_set(EWL_MVC(fp->type_combo), NULL, fp, 0, 0); - ewl_combo_editable_set(EWL_COMBO(fp->type_combo), TRUE); - ewl_callback_append(fp->type_combo, EWL_CALLBACK_VALUE_CHANGED, - ewl_filepicker_cb_type_change, fp); - ewl_container_child_append(EWL_CONTAINER(box), fp->type_combo); - ewl_object_fill_policy_set(EWL_OBJECT(fp->type_combo), + fp->mvc_filters.model = ewl_model_new(); + ewl_model_data_fetch_set(fp->mvc_filters.model, + ewl_filepicker_cb_type_fetch); + ewl_model_data_count_set(fp->mvc_filters.model, + ewl_filepicker_cb_type_count); + + fp->mvc_filters.view = ewl_label_view_get(); + ewl_view_header_fetch_set(fp->mvc_filters.view, + ewl_filepicker_cb_type_header); + + fp->mvc_filters.combo = ewl_combo_new(); + ewl_mvc_model_set(EWL_MVC(fp->mvc_filters.combo), + fp->mvc_filters.model); + ewl_mvc_view_set(EWL_MVC(fp->mvc_filters.combo), + fp->mvc_filters.view); + ewl_mvc_data_set(EWL_MVC(fp->mvc_filters.combo), fp); + ewl_mvc_selected_set(EWL_MVC(fp->mvc_filters.combo), + NULL, fp, 0, 0); + ewl_combo_editable_set(EWL_COMBO(fp->mvc_filters.combo), TRUE); + ewl_callback_append(fp->mvc_filters.combo, + EWL_CALLBACK_VALUE_CHANGED, + ewl_filepicker_cb_type_change, fp); + ewl_container_child_append(EWL_CONTAINER(box), + fp->mvc_filters.combo); + ewl_object_fill_policy_set(EWL_OBJECT(fp->mvc_filters.combo), EWL_FLAG_FILL_HFILL | EWL_FLAG_FILL_VSHRINK); - ewl_widget_show(fp->type_combo); + ewl_widget_show(fp->mvc_filters.combo); box = ewl_vbox_new(); ewl_container_child_append(EWL_CONTAINER(o), box); @@ -565,7 +575,6 @@ fp = data; e = ev; - /* XXX need to correctly deal with multiselect files in here */ if (e->response == EWL_FILELIST_EVENT_DIR_CHANGE) { char *dir; @@ -577,8 +586,11 @@ } else if ((e->response == EWL_FILELIST_EVENT_SELECTION_CHANGE) && (!fl->multiselect)) + { + ewl_text_clear(EWL_TEXT(fp->file_entry)); ewl_text_text_set(EWL_TEXT(fp->file_entry), ewl_filelist_selected_file_get(fl)); + } else if (e->response == EWL_FILELIST_EVENT_MULTI_TRUE) { @@ -701,7 +713,10 @@ DCHECK_PARAM_PTR(path); DCHECK_TYPE(fp, EWL_FILEPICKER_TYPE); - ecore_list_clear(fp->path); + /* Clear the list and free the data first */ + while ((p = ecore_list_first_remove(fp->path))) + FREE(p); + ecore_list_append(fp->path, strdup("/")); p = path; @@ -718,7 +733,7 @@ if (p && (*(p + 1) != '\0')) ecore_list_prepend(fp->path, strdup(path)); - ewl_mvc_dirty_set(EWL_MVC(fp->path_combo), TRUE); + ewl_mvc_dirty_set(EWL_MVC(fp->mvc_path.combo), TRUE); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -789,9 +804,7 @@ ewl_filepicker_cb_destroy(Ewl_Widget *w, void *ev __UNUSED__, void *data __UNUSED__) { - char *file; Ewl_Filepicker *fp; - Ewl_Filepicker_Filter *filter; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR(w); @@ -799,16 +812,10 @@ fp = EWL_FILEPICKER(w); - while ((file = ecore_list_first_remove(fp->path))) - FREE(file); - - while ((filter = ecore_list_first_remove(fp->filters))) - { - FREE(filter->name); - IF_FREE(filter->filter); - FREE(filter); - } - + IF_FREE(fp->mvc_path.model); + IF_FREE(fp->mvc_path.view); + IF_FREE(fp->mvc_filters.model); + IF_FREE(fp->mvc_filters.view); IF_FREE_LIST(fp->path); IF_FREE_LIST(fp->filters); =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_filepicker.h,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- ewl_filepicker.h 14 Nov 2007 20:07:59 -0000 1.12 +++ ewl_filepicker.h 17 Nov 2007 00:01:55 -0000 1.13 @@ -3,6 +3,8 @@ #define EWL_FILEPICKER_H #include "ewl_box.h" +#include "ewl_view.h" +#include "ewl_model.h" /** * @addtogroup Ewl_Filepicker Ewl_Filepicker: Allows selecting files from a list @@ -56,6 +58,13 @@ Ecore_List *path; /**< The path components */ Ecore_List *filters; /**< The type filters */ + + struct + { + Ewl_Model *model; + Ewl_View *view; + Ewl_Widget *combo; + } mvc_filters, mvc_path; unsigned char show_favorites:1; /**< Show the favorite box */ }; ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs