Enlightenment CVS committal

Author  : codewarrior
Project : e17
Module  : proto

Dir     : e17/proto/etk/src/lib


Modified Files:
        etk_filechooser_widget.c etk_filechooser_widget.h 


Log Message:
- patch from yiyus <[EMAIL PROTECTED]> to allow the file chooser to use a file 
with the same format as ~/.gtk-bookmarks. Had to modify it a bit as it was 
against an old version of Etk, and made it so that the dirs displayed in the 
favirites folder look better. Moom: so we need to free the data associated with 
an Etk_Tree_Row?


===================================================================
RCS file: 
/cvsroot/enlightenment/e17/proto/etk/src/lib/etk_filechooser_widget.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- etk_filechooser_widget.c    15 Jan 2006 11:07:16 -0000      1.4
+++ etk_filechooser_widget.c    17 Jan 2006 10:16:42 -0000      1.5
@@ -42,7 +42,9 @@
 static void _etk_filechooser_widget_destructor(Etk_Filechooser_Widget 
*filechooser_widget);
 static void _etk_filechooser_widget_property_set(Etk_Object *object, int 
property_id, Etk_Property_Value *value);
 static void _etk_filechooser_widget_property_get(Etk_Object *object, int 
property_id, Etk_Property_Value *value);
+static void _etk_filechooser_widget_favs_get(Etk_Filechooser_Widget 
*filechooser_widget);
 static void _etk_filechooser_widget_dir_row_selected_cb(Etk_Object *object, 
Etk_Tree_Row *row, void *data);
+static void _etk_filechooser_widget_fav_row_selected_cb(Etk_Object *object, 
Etk_Tree_Row *row, void *data);
 
 static Etk_Filechooser_Widget_Icons _etk_file_chooser_icons[] =
 {
@@ -97,8 +99,8 @@
 }
 
 /**
- * @brief Creates a new status bar
- * @return Returns the new status bar widget
+ * @brief Creates a new file chooser widget
+ * @return Returns the new file chooser widget
  */
 Etk_Widget *etk_filechooser_widget_new()
 {
@@ -236,11 +238,7 @@
    etk_tree_build(ETK_TREE(fcw->fav_tree));
    etk_widget_show(fcw->fav_tree);
    
-   etk_tree_append(ETK_TREE(fcw->fav_tree), fcw->fav_col, 
etk_theme_icon_theme_get(), "devices/drive-harddisk_16", "Root", NULL);
-   etk_tree_append(ETK_TREE(fcw->fav_tree), fcw->fav_col, 
etk_theme_icon_theme_get(), "places/user-home_16", "Home", NULL);
-   etk_tree_append(ETK_TREE(fcw->fav_tree), fcw->fav_col, 
etk_theme_icon_theme_get(), "places/folder_16", "Musics", NULL);
-   etk_tree_append(ETK_TREE(fcw->fav_tree), fcw->fav_col, 
etk_theme_icon_theme_get(), "places/folder_16", "Videos", NULL);
-   etk_tree_append(ETK_TREE(fcw->fav_tree), fcw->fav_col, 
etk_theme_icon_theme_get(), "places/folder_16", "Images", NULL);
+   etk_signal_connect("row_selected", ETK_OBJECT(fcw->fav_tree), 
ETK_CALLBACK(_etk_filechooser_widget_fav_row_selected_cb), fcw);
    
    fcw->files_tree = etk_tree_new();
    etk_widget_visibility_locked_set(fcw->files_tree, ETK_TRUE);
@@ -251,7 +249,8 @@
    fcw->files_date_col = etk_tree_col_new(ETK_TREE(fcw->files_tree), "Date", 
etk_tree_model_text_new(ETK_TREE(fcw->files_tree)), 60);
    etk_tree_build(ETK_TREE(fcw->files_tree));
    etk_widget_show(fcw->files_tree);
-   
+
+   _etk_filechooser_widget_favs_get(ETK_FILECHOOSER_WIDGET(fcw));   
    
    fcw->current_folder = NULL;
    /* Go to home */
@@ -302,6 +301,41 @@
    }
 }
 
+/* Get favorites from file in ~/ETK_FILECHOOSER_FAVS */
+static void _etk_filechooser_widget_favs_get(Etk_Filechooser_Widget 
*filechooser_widget)
+{
+   char *folder;
+   char file_path[PATH_MAX];
+   char fav[PATH_MAX];
+   char line[PATH_MAX];
+   FILE *f;
+   
+   if (!filechooser_widget)
+     return;
+   if (!(folder = getenv("HOME")))
+     return;
+   
+   snprintf(file_path, sizeof(file_path), "%s/%s", folder, 
ETK_FILECHOOSER_FAVS);
+     
+   if((f = fopen (file_path, "r")) == NULL)
+     return;
+   
+   etk_tree_freeze(ETK_TREE(filechooser_widget->fav_tree));
+   etk_tree_clear(ETK_TREE(filechooser_widget->fav_tree));
+   
+   while(fgets(line, PATH_MAX, f) != NULL)
+     {
+       Etk_Tree_Row *row;
+       sscanf(line,"file://%s",fav);
+       row = etk_tree_append(ETK_TREE(filechooser_widget->fav_tree),
+                             filechooser_widget->fav_col, 
etk_theme_icon_theme_get(), "places/folder_16", ecore_file_get_file(fav), NULL);
+       etk_tree_row_data_set(row, (void*)strdup(fav)); /* any special things 
to do here to free? */
+     }
+   
+   fclose (f);
+   etk_tree_thaw(ETK_TREE(filechooser_widget->fav_tree));
+}
+
 /**************************
  *
  * Callbacks and handlers
@@ -325,6 +359,19 @@
    free(new_dir);
 }
 
+static void _etk_filechooser_widget_fav_row_selected_cb(Etk_Object *object, 
Etk_Tree_Row *row, void *data)
+{
+   Etk_Filechooser_Widget *filechooser_widget;
+   char *selected_dir;
+   
+   if (!(filechooser_widget = ETK_FILECHOOSER_WIDGET(data)))
+     return;
+      
+   selected_dir = etk_tree_row_data_get(row);
+   etk_filechooser_widget_current_folder_set(filechooser_widget, selected_dir);
+   
+}    
+
 /**************************
  *
  * Private functions
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/proto/etk/src/lib/etk_filechooser_widget.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- etk_filechooser_widget.h    2 Dec 2005 21:57:55 -0000       1.1
+++ etk_filechooser_widget.h    17 Jan 2006 10:16:44 -0000      1.2
@@ -5,6 +5,8 @@
 #include <Evas.h>
 #include "etk_bin.h"
 #include "etk_types.h"
+#include <limits.h>
+
 
 /**
  * @defgroup Etk_Filechooser_Widget Etk_Filechooser_Widget
@@ -17,6 +19,8 @@
 #define ETK_FILECHOOSER_WIDGET(obj)       (ETK_OBJECT_CAST((obj), 
ETK_FILECHOOSER_WIDGET_TYPE, Etk_Filechooser_Widget))
 /** @brief Checks if the object is an Etk_Filechooser_Widget */
 #define ETK_IS_FILECHOOSER_WIDGET(obj)    (ETK_OBJECT_CHECK_TYPE((obj), 
ETK_FILECHOOSER_WIDGET_TYPE))
+/** @brief Default path for bookmarks */
+#define ETK_FILECHOOSER_FAVS ".gtk-bookmarks"
 
 /**
  * @struct Etk_Filechooser_Widget
@@ -36,7 +40,7 @@
    
    Etk_Widget *files_tree;
    Etk_Tree_Col *files_name_col;
-   Etk_Tree_Col *files_date_col;
+   Etk_Tree_Col *files_date_col;   
    
    char *current_folder;
 };
@@ -46,6 +50,7 @@
 
 void etk_filechooser_widget_current_folder_set(Etk_Filechooser_Widget 
*filechooser_widget, const char *folder);
 
+
 /** @} */
 
 #endif




-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to