Enlightenment CVS committal Author : codewarrior Project : e17 Module : libs/etk
Dir : e17/libs/etk/src/engines/ecore_fb Modified Files: ecore_fb.c Log Message: make internal wm themes configurable =================================================================== RCS file: /cvs/e/e17/libs/etk/src/engines/ecore_fb/ecore_fb.c,v retrieving revision 1.22 retrieving revision 1.23 diff -u -3 -r1.22 -r1.23 --- ecore_fb.c 29 Jun 2007 09:27:11 -0000 1.22 +++ ecore_fb.c 29 Jun 2007 20:00:49 -0000 1.23 @@ -3,17 +3,18 @@ #include <stdio.h> #include <string.h> #include <stdlib.h> +#include <limits.h> #include <Evas.h> #include <Edje.h> #include <Ecore_Evas.h> #include <Ecore_Fb.h> +#include <Ecore_File.h> #if ENGINE_E_FB_X11_SUPPORT #include <Ecore_X.h> #endif #include <Etk.h> #include "Etk_Engine_Ecore_Fb.h" -#define WM_THEME_FILE (PACKAGE_DATA_DIR "/wm/default.edj") #define DEFAULT_FB_WIDTH 1024 #define DEFAULT_FB_HEIGHT 768 @@ -74,7 +75,7 @@ /* Private functions */ Etk_Window *_window_focus_find_other(Etk_Window *current); static Etk_Cache *_pointer_cache_build(void); - +static char *_theme_find(const char *theme_name); /* Private vars */ static Etk_Bool _use_x11 = ETK_FALSE; @@ -83,6 +84,7 @@ static int _fb_width = DEFAULT_FB_WIDTH; static int _fb_height = DEFAULT_FB_HEIGHT; +static char *_wm_theme_file = NULL; static Evas_Object *_background_object = NULL; static Evas_Object *_pointer_object = NULL; static Etk_Cache *_pointer_cache = NULL; @@ -182,6 +184,17 @@ /* Called when the engine is loaded */ Etk_Engine *engine_open(int *argc, char ***argv) { + _wm_theme_file = _theme_find(etk_config_wm_theme_get()); + if (!_wm_theme_file) + { + /* fallback to default theme */ + _wm_theme_file = _theme_find("default"); + if (!_wm_theme_file) + { + return NULL; + } + } + engine_info.engine_data = NULL; engine_info.engine_name = strdup("ecore_fb"); @@ -225,6 +238,7 @@ void engine_close(void) { free(engine_info.engine_name); + free(_wm_theme_file); } /* Initializes the engine */ @@ -285,7 +299,7 @@ /* Create the background */ _background_object = edje_object_add(_evas); - edje_object_file_set(_background_object, WM_THEME_FILE, "etk/wm_background"); + edje_object_file_set(_background_object, _wm_theme_file, "etk/wm_background"); evas_object_resize(_background_object, _fb_width, _fb_height); evas_object_show(_background_object); @@ -708,13 +722,13 @@ } if (_pointer_object) - etk_cache_add(_pointer_cache, _pointer_object, WM_THEME_FILE, _pointer_group); + etk_cache_add(_pointer_cache, _pointer_object, _wm_theme_file, _pointer_group); free(_pointer_group); _pointer_group = NULL; - if ((_pointer_object = etk_cache_find(_pointer_cache, WM_THEME_FILE, group))) + if ((_pointer_object = etk_cache_find(_pointer_cache, _wm_theme_file, group))) _pointer_group = strdup(group); - else if ((_pointer_object = etk_cache_find(_pointer_cache, WM_THEME_FILE, "etk/wm_pointer_default"))) + else if ((_pointer_object = etk_cache_find(_pointer_cache, _wm_theme_file, "etk/wm_pointer_default"))) _pointer_group = strdup("etk/wm_pointer_default"); if (_pointer_object) @@ -772,9 +786,9 @@ engine_data->border = edje_object_add(_evas); if (engine_data->borderless) - edje_object_file_set(engine_data->border, WM_THEME_FILE, "etk/wm_borderless"); + edje_object_file_set(engine_data->border, _wm_theme_file, "etk/wm_borderless"); else - edje_object_file_set(engine_data->border, WM_THEME_FILE, "etk/wm_border"); + edje_object_file_set(engine_data->border, _wm_theme_file, "etk/wm_border"); edje_object_part_text_set(engine_data->border, "etk.text.title", engine_data->title ? engine_data->title : ""); edje_extern_object_min_size_set(ETK_WIDGET(window)->smart_object, engine_data->size.w, engine_data->size.h); @@ -1003,7 +1017,7 @@ int w, h; cache = etk_cache_new(50); - groups = edje_file_collection_list(WM_THEME_FILE); + groups = edje_file_collection_list(_wm_theme_file); for (l = groups; l; l = l->next) { group = l->data; @@ -1012,13 +1026,36 @@ pointer = edje_object_add(_evas); evas_object_pass_events_set(pointer, 1); - edje_object_file_set(pointer, WM_THEME_FILE, group); + edje_object_file_set(pointer, _wm_theme_file, group); edje_object_size_min_get(pointer, &w, &h); evas_object_resize(pointer, w, h); - etk_cache_add(cache, pointer, WM_THEME_FILE, group); + etk_cache_add(cache, pointer, _wm_theme_file, group); } } edje_file_collection_list_free(groups); return cache; +} + +/* Finds the theme called "theme_name" in the subdir wm and returns its path, or NULL on failure */ +static char *_theme_find(const char *theme_name) +{ + char path[PATH_MAX]; + char *home; + + if (!theme_name) + return NULL; + + if ((home = getenv("HOME"))) + { + snprintf(path, PATH_MAX, "%s/.e/etk/wm/%s.edj", home, theme_name); + if (ecore_file_exists(path)) + return strdup(path); + } + + snprintf(path, PATH_MAX, PACKAGE_DATA_DIR "/wm/%s.edj", theme_name); + if (ecore_file_exists(path)) + return strdup(path); + + return NULL; } ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs