Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto
Dir : e17/proto/exhibit/src/bin Modified Files: exhibit.h exhibit_file.c exhibit_file.h exhibit_image.c exhibit_menus.c Log Message: - autofoo fixes, eventually remove pkg-config - right click -> set as wallpaper (centered for now, will get more options) =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/exhibit/src/bin/exhibit.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- exhibit.h 14 Dec 2005 23:27:12 -0000 1.3 +++ exhibit.h 15 Dec 2005 10:07:14 -0000 1.4 @@ -19,6 +19,14 @@ #include "config.h" +#if HAVE_E +#include <E_Lib.h> +#endif + +#if HAVE_ENGRAVE +#include <Engrave.h> +#endif + #define ETK_DEFAULT_ICON_SET_FILE ETK_PACKAGE_DATA_DIR "/stock_icons/default.edj" typedef enum _Ex_Images =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/exhibit/src/bin/exhibit_file.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- exhibit_file.c 14 Dec 2005 11:33:30 -0000 1.1 +++ exhibit_file.c 15 Dec 2005 10:07:14 -0000 1.2 @@ -29,3 +29,25 @@ edje_file_collection_list_free(groups); return val; } + +char * +_ex_file_strip_extention(char *path) { + char *ptr; + char *c; + char *file; + int i; + + i = 0; + ptr = path; + c = strrchr(ptr,'.'); + file = malloc(strlen(path)); + + while(ptr != c) { + file[i] = *ptr; + ptr++; + i++; + } + + file[i] = '\0'; + return file; +} =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/exhibit/src/bin/exhibit_file.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- exhibit_file.h 14 Dec 2005 11:33:30 -0000 1.1 +++ exhibit_file.h 15 Dec 2005 10:07:14 -0000 1.2 @@ -2,5 +2,6 @@ #define _EX_FILE_H int _ex_file_is_viewable(char *file); +char *_ex_file_strip_extention(char *path); #endif =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/exhibit/src/bin/exhibit_image.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- exhibit_image.c 14 Dec 2005 23:27:12 -0000 1.5 +++ exhibit_image.c 15 Dec 2005 10:07:14 -0000 1.6 @@ -580,3 +580,152 @@ { } + +void +_ex_image_wallpaper_set(Etk_Image *im) +{ + pid_t pid; + int w, h; + char *file, *dir, *edj_file, *filenoext, *esetroot; + char esetroot_opt[] = "-c"; +#if HAVE_ENGRAVE + Engrave_File *edj; + Engrave_Image *image; + Engrave_Group *grp; + Engrave_Part *part; + Engrave_Part_State *ps; +#endif + + pid = fork(); + if(!pid) + { +#if HAVE_E + if (!e_lib_init(getenv("DISPLAY"))) + goto PSEUDO; + /* make sure we got a file name */ + if (!im->filename) exit(0); + if(strlen(im->filename) <= 4) exit(0); + + file = ecore_file_get_file(im->filename); + dir = ecore_file_get_dir(im->filename); + + filenoext = _ex_file_strip_extention(im->filename); + filenoext = ecore_file_get_file(filenoext); + + if (strcmp(im->filename + strlen(im->filename) - 4, ".edj") == 0) { + int w, h, num; + char static_bg[PATH_MAX]; + char esetroot_s[PATH_MAX*2]; + char filename_s[PATH_MAX]; + Ecore_X_Window *roots = NULL; + + if (!ecore_x_init(NULL)) + exit(0); + + num = 0; + roots = ecore_x_window_root_list(&num); + ecore_x_window_size_get(roots[0], &w, &h); + snprintf(filename_s, PATH_MAX, "/tmp/%s.png", filenoext); + snprintf(static_bg, PATH_MAX, "edje_thumb %s desktop/background %s -g %dx%d -og %dx%d", im->filename, filename_s, w, h, w, h); + system(static_bg); + e_lib_background_set(im->filename); + + snprintf(esetroot_s, PATH_MAX, "Esetroot %s %s ", esetroot_opt, filename_s); + system(esetroot_s); + exit(0); + } + +#if HAVE_ENGRAVE + /* Set up edj path */ + edj_file = malloc(strlen(getenv("HOME")) + strlen("/.e/e/backgrounds/") + + strlen(filenoext) + strlen(".edj") + 1); + strcpy(edj_file, getenv("HOME")); + strcat(edj_file, "/.e/e/backgrounds/"); + strcat(edj_file, filenoext); + strcat(edj_file, ".edj"); + + /* Determine image width / height */ + { + Evas_Object *o; + Ecore_Evas *ee; + + ee = ecore_evas_buffer_new(0, 0); + o = evas_object_image_add(ecore_evas_get(ee)); + evas_object_image_file_set(o, im->filename, NULL); + evas_object_image_size_get(o, &w, &h); + evas_object_del(o); + ecore_evas_free(ee); + } + + /* create the .edj */ + edj = engrave_file_new(); + engrave_file_image_dir_set(edj, dir); + image = engrave_image_new(file, ENGRAVE_IMAGE_TYPE_COMP, 0); + engrave_file_image_add(edj, image); + + grp = engrave_group_new(); + engrave_group_name_set(grp, "desktop/background"); + engrave_file_group_add(edj, grp); + + part = engrave_part_new(ENGRAVE_PART_TYPE_IMAGE); + engrave_part_name_set(part, "background_image"); + engrave_group_part_add(grp, part); + + ps = engrave_part_state_new(); + engrave_part_state_name_set(ps, "default", 0.0); + engrave_part_state_image_normal_set(ps, image); + + engrave_part_state_max_size_set(ps, w, h); + + /* for now, dont differentiate, just center */ +# if 0 + switch(e_bg_type) { + case E_BG_CENTER: + engrave_part_state_max_size_set(ps, w, h); + break; + + case E_BG_SCALE: + break; + + case E_BG_FIT: + break; + + case E_BG_TILE: + /* FIXME: This is a temp until dj2 fixes engrave */ + //engrave_part_state_max_size_set(ps, w, h); + engrave_part_state_fill_size_relative_set(ps, 0.0, 0.0); + engrave_part_state_fill_size_offset_set(ps, w, h); + break; + + default: + /* FIXME: This is a temp until dj2 fixes engrave */ + //engrave_part_state_max_size_set(ps, w, h); + engrave_part_state_fill_size_relative_set(ps, 0.0, 0.0); + engrave_part_state_fill_size_offset_set(ps, w, h); + break; + } +# endif + + engrave_part_state_add(part, ps); + + engrave_edj_output(edj, edj_file); + engrave_file_free(edj); + + /* set the background */ + e_lib_background_set(edj_file); + +#endif + e_lib_shutdown(); +#endif + +PSEUDO: + + /* If we're using pseudo-trans for eterm, then this will help */ + esetroot = malloc(strlen("Esetroot ") + strlen(esetroot_opt) + strlen(im->filename) + 2); + snprintf(esetroot, strlen("Esetroot ") + strlen(esetroot_opt) + strlen(im->filename) + 2, + "Esetroot %s %s", esetroot_opt, im->filename); + system(esetroot); + free(esetroot); + exit(0); + } +} =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/exhibit/src/bin/exhibit_menus.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- exhibit_menus.c 14 Dec 2005 23:27:12 -0000 1.5 +++ exhibit_menus.c 15 Dec 2005 10:07:14 -0000 1.6 @@ -257,8 +257,14 @@ void _ex_menu_set_wallpaper_cb(Etk_Object *obj, void *data) { + Exhibit *e; + Etk_Tree_Row *r; EX_MENU_ITEM_GET_RETURN(obj); - printf("set as wallpaper\n"); + + e = data; + r = etk_tree_selected_row_get(ETK_TREE(e->itree)); + if(!r) return; + _ex_image_wallpaper_set(e->image); } void ------------------------------------------------------- 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://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs