Enlightenment CVS committal Author : devilhorns Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: Makefile.am e_includes.h e_int_config_background.c Added Files: e_int_config_background_import.c e_int_config_background_import.h Log Message: Added import function to bg config dialog =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/Makefile.am,v retrieving revision 1.95 retrieving revision 1.96 diff -u -3 -r1.95 -r1.96 --- Makefile.am 21 Jan 2006 15:39:03 -0000 1.95 +++ Makefile.am 22 Jan 2006 14:11:15 -0000 1.96 @@ -121,6 +121,7 @@ e_int_config_window_manipulation.h \ e_int_config_window_display.h \ e_int_config_background.h \ +e_int_config_background_import.h \ e_int_config_theme.h \ e_int_config_menus.h \ e_int_config_general.h \ @@ -233,6 +234,7 @@ e_int_config_window_manipulation.c \ e_int_config_window_display.c \ e_int_config_background.c \ +e_int_config_background_import.c \ e_int_config_theme.c \ e_int_config_menus.c \ e_int_config_general.c \ =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_includes.h,v retrieving revision 1.78 retrieving revision 1.79 diff -u -3 -r1.78 -r1.79 --- e_includes.h 12 Jan 2006 02:12:21 -0000 1.78 +++ e_includes.h 22 Jan 2006 14:11:15 -0000 1.79 @@ -101,6 +101,7 @@ #include "e_int_config_window_manipulation.h" #include "e_int_config_window_display.h" #include "e_int_config_background.h" +#include "e_int_config_background_import.h" #include "e_int_config_theme.h" #include "e_int_config_menus.h" #include "e_int_config_general.h" =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_int_config_background.c,v retrieving revision 1.27 retrieving revision 1.28 diff -u -3 -r1.27 -r1.28 --- e_int_config_background.c 20 Jan 2006 11:09:14 -0000 1.27 +++ e_int_config_background.c 22 Jan 2006 14:11:15 -0000 1.28 @@ -1,41 +1,54 @@ /* * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 */ + #include "e.h" #define BG_SET_DEFAULT_DESK 0 #define BG_SET_THIS_DESK 1 #define BG_SET_ALL_DESK 2 -static void *_create_data (E_Config_Dialog *cfd); -static void _free_data (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); -static int _basic_apply_data (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); -static Evas_Object *_basic_create_widgets (E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata); -static int _advanced_apply_data (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); -static Evas_Object *_advanced_create_widgets (E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata); -static void _load_bgs (E_Config_Dialog *cfd, Evas_Object *il); -void _ilist_cb_bg_selected (void *data); +static void *_create_data (E_Config_Dialog *cfd); +static void _free_data (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); +static void _fill_data (E_Config_Dialog_Data *cfdata); +static int _basic_apply_data (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); +static Evas_Object *_basic_create_widgets (E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata); +static int _advanced_apply_data (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); +static Evas_Object *_advanced_create_widgets (E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata); +static void _load_bgs (E_Config_Dialog *cfd, Evas_Object *il); +void _ilist_cb_bg_selected (void *data); +static void _bg_config_dialog_cb_import (void *data, void *data2); +static int _bg_dialog_close (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); +static void _bg_file_added (void *data, Ecore_File_Monitor *monitor, Ecore_File_Event event, const char *path); + +static Ecore_File_Monitor *_bg_file_monitor; struct _E_Config_Dialog_Data { char *bg, *current_bg; int bg_method; + E_Config_Dialog *cfd; + E_Config_Dialog *import; + Evas_Object *il; }; EAPI E_Config_Dialog * e_int_config_background(E_Container *con) { E_Config_Dialog *cfd; - E_Config_Dialog_View v; + E_Config_Dialog_View *v; - v.create_cfdata = _create_data; - v.free_cfdata = _free_data; - v.basic.apply_cfdata = _basic_apply_data; - v.basic.create_widgets = _basic_create_widgets; - v.advanced.apply_cfdata = _advanced_apply_data; - v.advanced.create_widgets = _advanced_create_widgets; + v = E_NEW(E_Config_Dialog_View, 1); + + v->create_cfdata = _create_data; + v->free_cfdata = _free_data; + v->basic.apply_cfdata = _basic_apply_data; + v->basic.create_widgets = _basic_create_widgets; + v->advanced.apply_cfdata = _advanced_apply_data; + v->advanced.create_widgets = _advanced_create_widgets; + v->close_cfdata = _bg_dialog_close; - cfd = e_config_dialog_new(con, _("Background Settings"), NULL, 0, &v, NULL); + cfd = e_config_dialog_new(con, _("Background Settings"), NULL, 0, v, NULL); return cfd; } @@ -55,14 +68,20 @@ E_Config_Dialog_Data *cfdata; cfdata = E_NEW(E_Config_Dialog_Data, 1); - cfd->cfdata = cfdata; _fill_data(cfdata); + cfd->cfdata = cfdata; + cfdata->cfd = cfd; return cfdata; } static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) { + if (_bg_file_monitor) + { + ecore_file_monitor_del(_bg_file_monitor); + _bg_file_monitor = NULL; + } if (cfdata->current_bg) free(cfdata->current_bg); free(cfdata); } @@ -71,11 +90,15 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) { Evas_Object *o, *ot, *of, *il, *im; - + char path[4096]; + _fill_data(cfdata); ot = e_widget_table_add(evas, 0); il = e_widget_ilist_add(evas, 48, 48, &(cfdata->bg)); + + cfdata->il = il; + e_widget_ilist_selector_set(il, 1); e_widget_min_size_set(il, 180, 40); @@ -87,17 +110,31 @@ e_widget_ilist_go(il); e_widget_table_object_append(ot, il, 0, 0, 1, 2, 1, 1, 1, 1); + /* Add import Button */ + o = e_widget_button_add(evas, _("Import An Image"), NULL, _bg_config_dialog_cb_import, cfd, NULL); + e_widget_table_object_append(ot, o, 0, 2, 1, 1, 1, 0, 0, 0); + of = e_widget_framelist_add(evas, _("Background Preview"), 0); e_widget_min_size_set(of, 320, 240); e_widget_table_object_append(ot, of, 1, 0, 1, 2, 1, 1, 1, 1); e_widget_framelist_object_append(of, im); + if (_bg_file_monitor) + { + ecore_file_monitor_del(_bg_file_monitor); + _bg_file_monitor = NULL; + } + + snprintf(path, sizeof(path), "%s/.e/e/backgrounds", e_user_homedir_get()); + _bg_file_monitor = ecore_file_monitor_add(path, _bg_file_added, cfdata); return ot; } static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) { + if (!cfdata->bg) return 1; + while (e_config->desktop_backgrounds) { E_Config_Desktop_Background *cfbg; @@ -106,8 +143,8 @@ } if (e_config->desktop_default_background) evas_stringshare_del(e_config->desktop_default_background); - - if (!(cfdata->bg[0])) e_config->desktop_default_background = NULL; + + if (!cfdata->bg[0]) e_config->desktop_default_background = NULL; else e_config->desktop_default_background = evas_stringshare_add(cfdata->bg); @@ -123,11 +160,13 @@ { Evas_Object *o, *ot, *of, *il, *im, *oc; E_Radio_Group *rg; - + char path[4096]; + _fill_data(cfdata); ot = e_widget_table_add(evas, 0); il = e_widget_ilist_add(evas, 48, 48, &(cfdata->bg)); + cfdata->il = il; e_widget_ilist_selector_set(il, 1); e_widget_min_size_set(il, 180, 40); @@ -156,6 +195,15 @@ e_widget_framelist_object_append(of, oc); e_widget_table_object_append(ot, of, 1, 2, 1, 1, 1, 1, 1, 1); + + if (_bg_file_monitor) + { + ecore_file_monitor_del(_bg_file_monitor); + _bg_file_monitor = NULL; + } + + snprintf(path, sizeof(path), "%s/.e/e/backgrounds", e_user_homedir_get()); + _bg_file_monitor = ecore_file_monitor_add(path, _bg_file_added, cfdata); return ot; } @@ -185,8 +233,7 @@ if (e_config->desktop_default_background) evas_stringshare_del(e_config->desktop_default_background); - if (!(cfdata->bg[0])) - e_config->desktop_default_background = NULL; + if (!cfdata->bg[0]) e_config->desktop_default_background = NULL; else e_config->desktop_default_background = evas_stringshare_add(cfdata->bg); @@ -234,8 +281,10 @@ Evas *evasbuf; const char *f; char *c; - evas = evas_object_evas_get(il); + if (!il) return; + + evas = evas_object_evas_get(il); bg_obj = edje_object_add(cfd->dia->win->evas); /* Load The Theme's Background */ @@ -253,13 +302,13 @@ else o = e_thumb_evas_object_get(c, cfd->dia->win->evas, 48, 48, 1); - e_widget_ilist_append(il, o, _("Theme Background"), _ilist_cb_bg_selected, cfd, ""); + e_widget_ilist_append(il, o, "Theme Background", _ilist_cb_bg_selected, cfd, ""); } if (!e_config->desktop_default_background) e_widget_ilist_selected_set(il, 0); im = e_widget_image_add_from_object(cfd->dia->win->evas, bg_obj, 320, 240); - e_widget_image_object_set(im, e_thumb_evas_object_get(c, cfd->dia->win->evas, 320, 240, 1)); + e_widget_image_object_set(im, e_thumb_evas_object_get(c, cfd->dia->win->evas, 320, 240, 1)); evas_object_del(o); ecore_evas_free(eebuf); @@ -279,7 +328,7 @@ bgs = ecore_file_ls(d->dir); if (!bgs) continue; - while (bg_file = ecore_list_next(bgs)) + while ((bg_file = ecore_list_next(bgs))) { char full_path[4096]; @@ -349,3 +398,64 @@ } } +static void +_bg_config_dialog_cb_import(void *data, void *data2) +{ + E_Config_Dialog *parent; + E_Config_Dialog *import; + + parent = data; + if (!parent) return; + + import = e_int_config_background_import(parent); + parent->cfdata->import = import; +} + +static void +_bg_file_added(void *data, Ecore_File_Monitor *monitor, Ecore_File_Event event, const char *path) +{ + E_Config_Dialog *cfd; + E_Config_Dialog_Data *cfdata; + Evas *evas; + Evas_Object *il, *ic; + char *file; + + cfdata = data; + if (!cfdata) return; + + il = cfdata->il; + if (!il) return; + + cfd = cfdata->cfd; + if (!cfd) return; + + evas = e_win_evas_get(cfd->dia->win); + + file = (char *)ecore_file_get_file((char *)path); + if (event == ECORE_FILE_EVENT_CREATED_FILE) + { + printf("File Added: %s\n", path); + if (e_util_edje_collection_exists((char *)path, "desktop/background")) + { + if (!e_thumb_exists((char *)path)) + ic = e_thumb_generate_begin((char *)path, 48, 48, evas, &ic, NULL, NULL); + else + ic = e_thumb_evas_object_get((char *)path, evas, 48, 48, 1); + e_widget_ilist_append(il, ic, ecore_file_strip_ext(file), _ilist_cb_bg_selected, cfd, (char *)path); + } + } + free(file); +} + +static int +_bg_dialog_close(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) +{ + if (!cfd) return 0; + if (!cfdata) return 0; + if (!cfdata->import->dia) return 0; + + e_object_del_attach_func_set(E_OBJECT(cfd->dia), NULL); + e_object_del(E_OBJECT(cfdata->import->dia)); + + return 1; +} ------------------------------------------------------- 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