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

Reply via email to