Enlightenment CVS committal Author : codewarrior Project : e17 Module : apps/e_utils
Dir : e17/apps/e_utils/src/bin/ethemes Modified Files: E_Preview.h Makefile.am e_preview.c main.c Log Message: patch from Chady Leviathan Kassouf for various fixes and new scrollbar integration =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e_utils/src/bin/ethemes/E_Preview.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- E_Preview.h 12 Oct 2005 14:56:41 -0000 1.1 +++ E_Preview.h 14 Nov 2005 10:42:46 -0000 1.2 @@ -23,5 +23,36 @@ void e_preview_theme_set(Evas_Object *object, const char * theme); +int e_preview_is_theme(Evas * evas, const char * theme); + +/** + * initialize thumb generation. + */ +int e_preview_thumb_init(void); + +/** + * Get the full path of the thumbnail + */ +char * e_preview_thumb_file_get(const char * theme); + +/** + * Check the validity of the thumbnail + * @theme - the name of the theme file. + */ +int e_preview_thumb_check(const char * theme); + +/** + * Create a thumbnail for the current theme + * @theme - the name of the theme file. + */ +int e_preview_thumb_generate(const char * theme); + +/** + * Set an evas object's data to the thumbnail's image + * @theme - the name of the theme file + * @obj - the evas image object + */ +int e_preview_thumb_image(const char * theme, Evas_Object * obj); + #endif =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e_utils/src/bin/ethemes/Makefile.am,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- Makefile.am 23 Oct 2005 11:51:18 -0000 1.3 +++ Makefile.am 14 Nov 2005 10:42:46 -0000 1.4 @@ -9,6 +9,7 @@ @ECORE_CFLAGS@ \ @EVAS_CFLAGS@ \ @ESMART_CFLAGS@ \ + @[EMAIL PROTECTED] @EDJE_CFLAGS@ \ @ENLIGHTENMENT_CFLAGS@ @@ -26,6 +27,7 @@ @EDJE_LIBS@ \ @ESMART_LIBS@ \ -lesmart_container \ + @EET_LIBS@ \ @ENLIGHTENMENT_LIBS@ EXTRA_DIST = \ =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e_utils/src/bin/ethemes/e_preview.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- e_preview.c 24 Oct 2005 10:51:19 -0000 1.2 +++ e_preview.c 14 Nov 2005 10:42:46 -0000 1.3 @@ -4,12 +4,13 @@ #include <limits.h> #include <Edje.h> #include <Evas.h> +#include <Ecore_Evas.h> +#include <Eet.h> #include <E_Lib.h> #include <sys/stat.h> #include "E_Preview.h" - typedef struct _e_preview E_Preview; struct _e_preview { @@ -34,19 +35,13 @@ static void _e_preview_redraw(Evas_Object *); static void _e_preview_add(Evas_Object *); static void _e_preview_del(Evas_Object *); -static void _e_preview_layer_set(Evas_Object *, int); -static void _e_preview_raise(Evas_Object *); -static void _e_preview_lower(Evas_Object *); -static void _e_preview_stack_above(Evas_Object *, Evas_Object *); -static void _e_preview_stack_below(Evas_Object *, Evas_Object *); static void _e_preview_move(Evas_Object *, Evas_Coord, Evas_Coord); static void _e_preview_resize(Evas_Object *, Evas_Coord, Evas_Coord); static void _e_preview_show(Evas_Object *); static void _e_preview_hide(Evas_Object *); -static void _e_preview_color_set(Evas_Object *, int, int, int, int); static void _e_preview_clip_set(Evas_Object *, Evas_Object *); -static void _e_preview_clip_unset(Evas_Object *); +static char * _e_thumb_file_id(char *file); Evas_Object * e_preview_new(Evas *evas) { @@ -86,18 +81,14 @@ "e_preview", _e_preview_add, _e_preview_del, - _e_preview_layer_set, - _e_preview_raise, - _e_preview_lower, - _e_preview_stack_above, - _e_preview_stack_below, + NULL, NULL, NULL, NULL, NULL, _e_preview_move, _e_preview_resize, _e_preview_show, _e_preview_hide, - _e_preview_color_set, + NULL, _e_preview_clip_set, - _e_preview_clip_unset, + NULL, NULL ); return smart; @@ -151,77 +142,6 @@ } } -static void _e_preview_layer_set(Evas_Object *o, int l) { - E_Preview * data; - - if ((data = evas_object_smart_data_get(o))) { - evas_object_layer_set(data->wallpaper, l); - evas_object_layer_set(data->window, l); - evas_object_layer_set(data->clock, l); - evas_object_layer_set(data->start, l); - evas_object_layer_set(data->pager[0], l); - evas_object_layer_set(data->pager[1], l); - evas_object_layer_set(data->pager[2], l); - } -} - -static void _e_preview_raise(Evas_Object *o) { - E_Preview * data; - - if ((data = evas_object_smart_data_get(o))) { - evas_object_raise(data->wallpaper); - evas_object_raise(data->window); - evas_object_raise(data->clock); - evas_object_raise(data->start); - evas_object_raise(data->pager[0]); - evas_object_raise(data->pager[1]); - evas_object_raise(data->pager[2]); - } -} - -static void _e_preview_lower(Evas_Object *o) { - E_Preview * data; - - if ((data = evas_object_smart_data_get(o))) { - evas_object_lower(data->wallpaper); - evas_object_lower(data->window); - evas_object_lower(data->clock); - evas_object_lower(data->start); - evas_object_lower(data->pager[0]); - evas_object_lower(data->pager[1]); - evas_object_lower(data->pager[2]); - } -} - -static void _e_preview_stack_above(Evas_Object *o, Evas_Object * above) { - E_Preview * data; - - if ((data = evas_object_smart_data_get(o))) { - evas_object_stack_above(data->wallpaper, above); - evas_object_stack_above(data->window, above); - evas_object_stack_above(data->clock, above); - evas_object_stack_above(data->start, above); - evas_object_stack_above(data->pager[0], above); - evas_object_stack_above(data->pager[1], above); - evas_object_stack_above(data->pager[2], above); - } -} - -static void _e_preview_stack_below(Evas_Object *o, Evas_Object * below) { - E_Preview * data; - - if ((data = evas_object_smart_data_get(o))) { - evas_object_stack_below(data->wallpaper, below); - evas_object_stack_below(data->window, below); - evas_object_stack_below(data->clock, below); - evas_object_stack_below(data->start, below); - evas_object_stack_below(data->pager[0], below); - evas_object_stack_below(data->pager[1], below); - evas_object_stack_below(data->pager[2], below); - } -} - - static void _e_preview_move(Evas_Object *o, Evas_Coord x, Evas_Coord y) { E_Preview *data; @@ -273,9 +193,27 @@ } } +int e_preview_is_theme(Evas * evas, const char * theme) { + + char * file = malloc(sizeof(char) * PATH_MAX); + snprintf(file, PATH_MAX, "%s/.e/e/themes/%s", getenv("HOME"), theme); + + Evas_Object * o = NULL; + o = edje_object_add(evas); + edje_object_file_set(o, file, "widgets/border/default/border"); + if (edje_object_part_exists(o, "widgets/border/default/border")) + return 1; + + return 0; + +} + void e_preview_theme_set(Evas_Object *object, const char * theme) { E_Preview *data; + Evas * evas = NULL; + + evas = evas_object_evas_get(object); if ((data = evas_object_smart_data_get(object))) { @@ -309,27 +247,22 @@ data->theme, "widgets/border/default/border"); - edje_object_file_set(data->clock, - data->theme, - "modules/clock/main"); - - edje_object_file_set(data->clock, - data->theme, - "modules/clock/main"); + if (! data->clock ) data->clock = edje_object_add(evas); + if (! edje_object_file_set(data->clock, data->theme, "modules/clock/main")) { + evas_object_del(data->clock); + data->clock = NULL; + } - edje_object_file_set(data->start, - data->theme, - "modules/start/main"); + if (! data->start ) data->start = edje_object_add(evas); + if (! edje_object_file_set(data->start, data->theme, "modules/start/main")) { + evas_object_del(data->start); + data->start = NULL; + } - edje_object_file_set(data->pager[0], - data->theme, - "modules/pager/main"); - edje_object_file_set(data->pager[1], - data->theme, - "modules/pager/desk"); - edje_object_file_set(data->pager[2], - data->theme, - "modules/pager/window"); + if (edje_object_file_set(data->pager[0], data->theme, "modules/pager/main")) { + edje_object_file_set(data->pager[1], data->theme, "modules/pager/desk"); + edje_object_file_set(data->pager[2], data->theme, "modules/pager/window"); + } e_preview_init(object); } @@ -394,19 +327,23 @@ data->h * 0.75); /* clock */ - evas_object_move(data->clock, + if (data->clock) { + evas_object_move(data->clock, data->x + (data->w * 0.9), data->y + (data->h * 0.9)); - evas_object_resize(data->clock, + evas_object_resize(data->clock, data->w * 0.1, data->h * 0.1); - + } + /* start */ - evas_object_move(data->start, + if (data->start) { + evas_object_move(data->start, data->x, data->y + (data->h * 0.9)); - evas_object_resize(data->start, + evas_object_resize(data->start, data->w * 0.1, data->h * 0.1); - + } + /* pager */ evas_object_move(data->pager[0], data->x + (data->w * 0.3), @@ -418,22 +355,146 @@ } } +int e_preview_thumb_image(const char * thumb, Evas_Object * obj) { + + Eet_File * ef; + ef = eet_open(thumb, EET_FILE_MODE_READ); + if (ef) { + int * pixels; + pixels = (int *) eet_data_image_read(ef, "/thumbnail/data", + NULL, NULL, NULL, NULL, NULL, NULL); + evas_object_image_data_set(obj, pixels); + eet_close(ef); + } -static void _e_preview_color_set(Evas_Object *o, - int r, int g, int b, int a) {} + return 1; + +} + +int e_preview_thumb_init(void) { + + char path[PATH_MAX]; + snprintf(path, sizeof(path), "%s/.e/e/fileman/thumbnails", getenv("HOME")); + if (!ecore_file_exists(path)) + ecore_file_mkpath(path); + else + return 0; + + return 1; + +} + +int e_preview_thumb_check(const char * theme) { + + struct stat themestatus; + struct stat thumbstatus; + char themefile[PATH_MAX]; + snprintf(themefile, PATH_MAX, "%s/.e/e/themes/%s", getenv("HOME"), theme); + + char * thumb = e_preview_thumb_file_get(theme); + + if (stat(themefile, &themestatus) == 0) + if (stat(thumb, &thumbstatus) == 0) { + if (themestatus.st_mtime > thumbstatus.st_mtime) /* not uptodate */ + return 1; + } else { + return 1; + } + + + + return 0; +} + +char * e_preview_thumb_file_get(const char * theme) { + + char * file = (char *)malloc(sizeof(char) * PATH_MAX); + snprintf(file, PATH_MAX, "%s/.e/e/themes/%s", getenv("HOME"), theme); + + char * thumb = (char *)malloc(sizeof(char) * PATH_MAX); + snprintf(thumb, PATH_MAX, "%s/.e/e/fileman/thumbnails/%s", getenv("HOME"), _e_thumb_file_id(file)); + + return thumb; +} + +int e_preview_thumb_generate(const char * theme) { + + printf("Generating thumb.\n"); + Ecore_Evas *ee = NULL; + Evas *e = NULL; + Evas_Object * preview; + + ee = ecore_evas_buffer_new(640, 480); + e = ecore_evas_get(ee); + preview = e_preview_new(e); + e_preview_theme_set(preview, theme); + evas_object_move(preview, 0, 0); + evas_object_resize(preview, 640, 480); + evas_object_show(preview); + + const int *pixels; + pixels = ecore_evas_buffer_pixels_get(ee); + char * out = e_preview_thumb_file_get(theme); + + Eet_File * ef; + ef = eet_open(out, EET_FILE_MODE_WRITE); + if (ef) { + char path[PATH_MAX]; + snprintf(path, PATH_MAX, "%s/.e/e/themes/%s", getenv("HOME"), theme); + eet_write(ef, "/thumbnail/orig_path", path, strlen(path), 1); + eet_data_image_write(ef, "/thumbnail/data", (void *) pixels, 640, 480, 1, 0, 91, 1); + eet_close(ef); + } + + return 1; +} static void _e_preview_clip_set(Evas_Object *o, Evas_Object *clip){ E_Preview *data; if ((data = evas_object_smart_data_get(o))) { evas_object_clip_set(data->wallpaper, clip); - } - - } -static void _e_preview_clip_unset(Evas_Object *o) {} - +/* return hash for a file (from E) */ +static char * _e_thumb_file_id(char *file) { + char s[256], *sp; + const char *chmap = + "0123456789abcdef" + "ghijklmnopqrstuv" + "[EMAIL PROTECTED]&*()" + "[];',.{}<>?-=_+|"; + unsigned int id[4], i; + struct stat st; + + if (stat(file, &st) < 0) + return NULL; + + id[0] = st.st_ino; + id[1] = st.st_dev; + id[2] = (st.st_size & 0xffffffff); + id[3] = (st.st_mtime & 0xffffffff); + + sp = s; + for (i = 0; i < 4; i++) + { + unsigned int t, tt; + int j; + + t = id[i]; + j = 32; + while (j > 0) + { + tt = t & ((1 << 6) - 1); + *sp = chmap[tt]; + t >>= 6; + j -= 6; + sp++; + } + } + *sp = 0; + return strdup(s); +} =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e_utils/src/bin/ethemes/main.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- main.c 23 Oct 2005 11:51:18 -0000 1.7 +++ main.c 14 Nov 2005 10:42:46 -0000 1.8 @@ -21,22 +21,92 @@ const int HEIGHT = 500; const int container_height = 400; -char * selected_theme; -char * current_theme; - Evas_List * themes; -Evas_Object * label; - Evas_Object * container_outer; Evas_Object * container; -Evas_Object * scrollbar; -Evas_Object ** buttons; +Evas_Object * b_default, + * b_apply, + * b_exit; + Evas_Object * preview; Evas_Object * preview_clip; Evas_Object * background; +Evas_Object * last_button; + +char * default_theme; +char * selected_theme; + +typedef struct { + Evas_Object * thumb; + Evas_Object * button; + char * theme; + char * label; + char * thumbpath; +} Etheme_Object; + + +static void _preview_theme(void *data, Evas_Object *obj, const char *emission, const char *source); + +Etheme_Object * etheme_new(const char * t) { + + Etheme_Object * o; + o = (Etheme_Object *) malloc(sizeof(Etheme_Object)); + + o->theme = (char *) strdup(t); + o->thumbpath = e_preview_thumb_file_get(t); + + + int size = strlen(t) - 4; /* without .edj */ + + o->label = malloc(sizeof(char) * size); + o->label = strncpy(o->label, t, size); + o->label[size] = 0; + + o->button = edje_object_add(evas); + + edje_object_file_set(o->button, default_theme, "fileman/icon_normal"); + evas_object_resize(o->button, 100, 120); + edje_object_part_text_set(o->button, "icon_title" , o->label); + + esmart_container_element_append(container, o->button); + + if (e_preview_thumb_check(t)) + e_preview_thumb_generate(t); + + o->thumb = evas_object_image_add(evas); + evas_object_image_size_set(o->thumb, 640, 480); + evas_object_image_fill_set(o->thumb, 0, 0, 85, 85); + e_preview_thumb_image(o->thumbpath, o->thumb); + + edje_object_part_swallow(o->button, "icon_swallow", o->thumb); + + evas_object_show(o->button); + + edje_object_signal_callback_add(o->button, "mouse,up,1", "icon_event", + _preview_theme, o); + + + return o; + +} + +void etheme_free(Etheme_Object * o) { + + if (!o) return; + + if (o->theme) free(o->theme); + if (o->thumbpath) free(o->thumbpath); + if (o->label) free(o->label); + + evas_object_del(o->thumb); + evas_object_del(o->button); + + free(o); +} + void _resize_cb(Ecore_Evas * ee) { @@ -52,30 +122,47 @@ evas_object_move(background, 0, 0); evas_object_resize(background, barwidth, h); evas_object_show(background); + + evas_object_resize(container_outer, barwidth, h - 100); int length = (int) esmart_container_elements_length_get(container); - if (length > h - 100) { - evas_object_resize(container_outer, barwidth - 19, h - 100); - evas_object_show(scrollbar); - } else { - evas_object_resize(container_outer, barwidth, h - 100); - evas_object_hide(scrollbar); - } - int n = evas_list_count(themes); - evas_object_move(buttons[n], 0, h - 100 + 10); - evas_object_move(buttons[n+1], 0, h - 100 + 40); - evas_object_move(buttons[n+2], 0, h - 100 + 60); - evas_object_resize(scrollbar, 16, h - 100); + double size; + size = (double)(h - 100) / (double)length; + + edje_object_part_drag_size_set(container_outer, "vbar_bar", 1.0, size); + + if (length > h - 100) + edje_object_signal_emit(container_outer, "vbar", "show"); + else + edje_object_signal_emit(container_outer, "vbar", "hide"); + + evas_object_move(b_default, 0, h - 100 + 10); + evas_object_move(b_apply, 0, h - 100 + 40); + evas_object_move(b_exit, 0, h - 100 + 60); } -static void _preview_theme(void *data, Evas_Object *o, const char *emission, const char *source) { +static void _preview_theme(void *data, Evas_Object *obj, const char *emission, const char *source) { - selected_theme = (char *) data; + Etheme_Object * o; + o = (Etheme_Object *) data; + + if (!o) + selected_theme = (char *)strdup("default.edj"); + else + selected_theme = o->theme; e_preview_theme_set(preview, selected_theme); + + if (last_button) + edje_object_signal_emit(last_button, "unclicked", ""); + if (o) { + edje_object_signal_emit(o->button, "clicked", ""); + last_button = o->button; + } + _resize_cb(ee); } @@ -97,31 +184,15 @@ } -static void _scrollup(void *data, Evas_Object *o, const char *emission, const char *source) { - esmart_container_scroll_start(container, 1); -} - -static void _scrolldown(void *data, Evas_Object *o, const char *emission, const char *source) { - esmart_container_scroll_start(container, -1); -} - static void _scrolldrag(void *data, Evas_Object *o, const char *emission, const char *source) { - double x, y; - edje_object_part_drag_value_get(scrollbar, "drag", &x, &y); + double y; + edje_object_part_drag_value_get(container_outer, "vbar_bar", NULL, &y); esmart_container_scroll_percent_set(container, y); } -static void _scrollstop(void *data, Evas_Object *o, const char *emission, const char *source) { - esmart_container_scroll_stop(container); - double s; - s = esmart_container_scroll_percent_get(container); - edje_object_part_drag_value_set(scrollbar, "drag", 1, s); - -} - -void read_theme_list() { +void get_theme_list() { char * path; path = malloc(sizeof(char) * PATH_MAX); @@ -133,10 +204,13 @@ ecore_list_goto_first(list); char * data; themes = NULL; - while ((data = (char *)ecore_list_next(list))) + while (data = (char *)ecore_list_next(list)) if (strstr(data, ".edj") != NULL) { char * file = (char *) strdup(data); - themes = evas_list_append(themes, file); + Etheme_Object * o; + o = etheme_new(file); + themes = evas_list_append(themes, o); + free(file); } ecore_list_destroy(list); @@ -146,74 +220,42 @@ void create_buttons() { - int n = evas_list_count(themes); - - buttons = calloc(n + 3, sizeof(Evas_Object *)); container_outer = edje_object_add(evas); - edje_object_file_set(container_outer, current_theme, "modules/ibar/main"); + edje_object_file_set(container_outer, default_theme, "widgets/scrollframe"); evas_object_move(container_outer, 0, 0); + edje_object_signal_emit(container_outer, "hbar", "hide"); evas_object_resize(container_outer, barwidth - 19, container_height); evas_object_show(container_outer); - scrollbar = edje_object_add(evas); - edje_object_file_set(scrollbar, current_theme, "widgets/vscrollbar"); - evas_object_move(scrollbar, barwidth - 19, 0); - evas_object_resize(scrollbar, 16, container_height); - evas_object_show(scrollbar); - - edje_object_signal_callback_add(scrollbar, "scroll_top_start", "", _scrollup, NULL); - edje_object_signal_callback_add(scrollbar, "scroll_bottom_start", "", _scrolldown, NULL); - edje_object_signal_callback_add(scrollbar, "scroll_top_stop", "", _scrollstop, NULL); - edje_object_signal_callback_add(scrollbar, "scroll_bottom_stop", "", _scrollstop, NULL); - edje_object_signal_callback_add(scrollbar, "drag", "*", _scrolldrag, NULL); + edje_object_signal_callback_add(container_outer, "drag*", "vbar_bar", _scrolldrag, NULL); container = esmart_container_new(evas); - edje_object_part_swallow(container_outer, "items", container); + edje_object_part_swallow(container_outer, "item", container); esmart_container_direction_set(container, CONTAINER_DIRECTION_VERTICAL); + get_theme_list(); -#define BUTTON_EVENTS(A, B, C)\ - edje_object_signal_callback_add(buttons[A], "click", "", B, C); - -#define ADD_BUTTON(A, B, C, D)\ - buttons[A] = edje_object_add(evas);\ - edje_object_file_set(buttons[A], current_theme, "widgets/button");\ - evas_object_resize(buttons[A], D, 24);\ - edje_object_part_text_set(buttons[A], "label", C);\ - evas_object_show(buttons[A]); - - int i; - for (i=0; i<n; i++) { - - char * n; - n = evas_list_nth(themes, i); - char * name; - int size = strlen(n) - 4; /* without .edj */ - name = malloc(sizeof(char) * size); - name = strncpy(name, n, size); - name[size] = 0; - - ADD_BUTTON(i, 20, name, 100); - esmart_container_element_append(container, buttons[i]); - BUTTON_EVENTS(i, _preview_theme, evas_list_nth(themes, i)); - - } - - ADD_BUTTON(n, 40, "Default Theme", 120); - evas_object_move(buttons[n], 5, container_height + 10); - BUTTON_EVENTS(n, _preview_theme, "default.edj"); +#define ADD_BUTTON(A, B, C)\ + A = edje_object_add(evas);\ + edje_object_file_set(A, default_theme, "widgets/button");\ + evas_object_resize(A, 120, 24);\ + edje_object_part_text_set(A, "label", C);\ + evas_object_show(A); + + ADD_BUTTON(b_default, 40, "Default Theme"); + evas_object_move(b_default, 5, container_height + 10); + edje_object_signal_callback_add(b_default, "click", "", _preview_theme, NULL); - ADD_BUTTON(n + 1, 60, "Apply", 120); - evas_object_move(buttons[n+1], 5, container_height + 40); - BUTTON_EVENTS(n + 1, _set_theme, NULL); - - ADD_BUTTON(n + 2, 80, "Exit", 120); - evas_object_move(buttons[n+2], 5, container_height + 60); - BUTTON_EVENTS(n + 2, _ethemes_exit, NULL); + ADD_BUTTON(b_apply, 60, "Apply"); + evas_object_move(b_apply, 5, container_height + 40); + edje_object_signal_callback_add(b_apply, "click", "", _set_theme, NULL); + + ADD_BUTTON(b_exit, 80, "Exit"); + evas_object_move(b_exit, 5, container_height + 60); + edje_object_signal_callback_add(b_exit, "click", "", _ethemes_exit, NULL); -#undef BUTTON_EVENTS #undef ADD_BUTTON } @@ -222,17 +264,9 @@ E_Response_Theme_Get *e; e = ev; -/* for now, I'll only use the default e17 theme cause it's the only one that - * is guaranteed to work. - - current_theme = malloc(sizeof(char) * PATH_MAX); - snprintf(current_theme, PATH_MAX, "%s/.e/e/themes/%s", getenv("HOME"), - e->file); -*/ - - current_theme = E17PREFIX "/share/enlightenment/data/themes/default.edj"; + default_theme = (char *) strdup(E17PREFIX "/share/enlightenment/data/themes/default.edj"); - edje_object_file_set(background, current_theme, "widgets/menu/default/background"); + edje_object_file_set(background, default_theme, "widgets/menu/default/background"); selected_theme = (char *)strdup(e->file); e_preview_theme_set(preview, selected_theme); @@ -273,6 +307,8 @@ evas_object_resize(background, barwidth, HEIGHT); evas_object_show(background); + e_preview_thumb_init(); + preview = e_preview_new(evas); preview_clip = evas_object_rectangle_add(evas); @@ -280,8 +316,8 @@ evas_object_resize(preview_clip, WIDTH - barwidth, HEIGHT); evas_object_show(preview_clip); evas_object_clip_set (preview, preview_clip); - - read_theme_list(); + + last_button = NULL; ecore_evas_callback_resize_set(ee, _resize_cb); @@ -290,7 +326,28 @@ ecore_main_loop_begin(); + /* free ethemes */ + int n = evas_list_count(themes); + for ( n -= 1; n>=0; n--) { + Etheme_Object * o; + o = evas_list_nth(themes, n); + etheme_free(o); + } + evas_list_free(themes); + /* free canvas objects */ + evas_object_free(container); + evas_object_free(container_outer); + evas_object_free(b_apply); + evas_object_free(b_default); + evas_object_free(b_exit); + evas_object_free(background); + evas_object_free(preview); + evas_object_free(preview_clip); + + if (selected_theme) free(selected_theme); + if (default_theme) free(default_theme); + edje_shutdown(); ecore_shutdown(); @@ -298,4 +355,3 @@ } - ------------------------------------------------------- SF.Net email is sponsored by: Tame your development challenges with Apache's Geronimo App Server. Download it for free - -and be entered to win a 42" plasma tv or your very own Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs