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