Enlightenment CVS committal Author : onefang Project : e17 Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_desktop Modified Files: Ecore_Desktop.h ecore_desktop_paths.c Log Message: Allow diddling with the paths. =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_desktop/Ecore_Desktop.h,v retrieving revision 1.23 retrieving revision 1.24 diff -u -3 -r1.23 -r1.24 --- Ecore_Desktop.h 7 Sep 2006 08:51:47 -0000 1.23 +++ Ecore_Desktop.h 7 Sep 2006 13:16:21 -0000 1.24 @@ -86,7 +86,8 @@ ECORE_DESKTOP_PATHS_DESKTOPS = 3, ECORE_DESKTOP_PATHS_ICONS = 4, ECORE_DESKTOP_PATHS_KDE_LEGACY = 5, - ECORE_DESKTOP_PATHS_XSESSIONS = 6 + ECORE_DESKTOP_PATHS_XSESSIONS = 6, + ECORE_DESKTOP_PATHS_MAX = 7 }; typedef enum _Ecore_Desktop_Paths_Type Ecore_Desktop_Paths_Type; @@ -123,6 +124,12 @@ /* Function Prototypes */ EAPI int ecore_desktop_paths_init(void); + EAPI void ecore_desktop_paths_extras_clear(void); + EAPI void ecore_desktop_paths_prepend_user(Ecore_Desktop_Paths_Type type, char *paths); + EAPI void ecore_desktop_paths_prepend_system(Ecore_Desktop_Paths_Type type, char *paths); + EAPI void ecore_desktop_paths_append_user(Ecore_Desktop_Paths_Type type, char *paths); + EAPI void ecore_desktop_paths_append_system(Ecore_Desktop_Paths_Type type, char *paths); + EAPI void ecore_desktop_paths_regen(void); char *ecore_desktop_paths_file_find(Ecore_List * paths, const char *file, int sub, int (*func) (void =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_desktop/ecore_desktop_paths.c,v retrieving revision 1.21 retrieving revision 1.22 diff -u -3 -r1.21 -r1.22 --- ecore_desktop_paths.c 5 Sep 2006 17:54:20 -0000 1.21 +++ ecore_desktop_paths.c 7 Sep 2006 13:16:21 -0000 1.22 @@ -38,10 +38,10 @@ * and correct those guesses. */ -static int init_count = 0; -static Ecore_List *_ecore_desktop_paths_get(char *before, char *env_home, +static Ecore_List *_ecore_desktop_paths_get(Ecore_Desktop_Paths_Type path_type, + char *before, char *env_home, char *env, char *env_home_default, char *env_default, char *type, char *gnome_extra, char *kde); @@ -50,10 +50,16 @@ char *second); static void _ecore_desktop_paths_check_and_add(Ecore_List * paths, char *path); +static void _ecore_desktop_paths_create(); +static void _ecore_desktop_paths_destroy(); static Ecore_List *gnome_data = NULL; +static Ecore_List *prepend_user_paths[ECORE_DESKTOP_PATHS_MAX]; +static Ecore_List *prepend_system_paths[ECORE_DESKTOP_PATHS_MAX]; +static Ecore_List *append_user_paths[ECORE_DESKTOP_PATHS_MAX]; +static Ecore_List *append_system_paths[ECORE_DESKTOP_PATHS_MAX]; static char *home; - +static int init_count = 0; #if defined GNOME_SUPPORT || defined KDE_SUPPORT struct _config_exe_data @@ -80,14 +86,13 @@ { if (++init_count != 1) return init_count; - /* FIXME: Keep track of any loose strdups in a list, so that we can free them at shutdown time. */ - #if defined GNOME_SUPPORT || defined KDE_SUPPORT exit_handler = ecore_event_handler_add(ECORE_EXE_EVENT_DEL, _ecore_desktop_paths_cb_exe_exit, NULL); #endif + ecore_desktop_paths_extras_clear(); gnome_data = ecore_list_new(); home = ecore_desktop_home_get(); @@ -123,10 +128,40 @@ #endif } + _ecore_desktop_paths_create(); + return init_count; +} + +EAPI int +ecore_desktop_paths_shutdown() +{ + if (--init_count != 0) return init_count; + + _ecore_desktop_paths_destroy(); + E_FN_DEL(ecore_list_destroy, gnome_data); + +#if defined GNOME_SUPPORT || defined KDE_SUPPORT + if (exit_handler) + ecore_event_handler_del(exit_handler); +#endif + free(home); + return init_count; +} + +EAPI void +ecore_desktop_paths_regen() +{ + _ecore_desktop_paths_destroy(); + _ecore_desktop_paths_create(); +} + +static void +_ecore_desktop_paths_create() +{ if (!ecore_desktop_paths_desktops) { ecore_desktop_paths_desktops = - _ecore_desktop_paths_get(NULL, "XDG_DATA_HOME", "XDG_DATA_DIRS", + _ecore_desktop_paths_get(ECORE_DESKTOP_PATHS_DESKTOPS, NULL, "XDG_DATA_HOME", "XDG_DATA_DIRS", "~/.local/share:~/.kde/share", "/usr/local/share:/usr/share", "applications:applnk:applications/kde", @@ -144,11 +179,11 @@ #ifdef KDE_SUPPORT ecore_desktop_paths_kde_legacy = - _ecore_desktop_paths_get(NULL, NULL, NULL, NULL, NULL, NULL, NULL, + _ecore_desktop_paths_get(ECORE_DESKTOP_PATHS_KDE_LEGACY, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "apps"); #else ecore_desktop_paths_kde_legacy = - _ecore_desktop_paths_get(NULL, "XDG_DATA_HOME", "XDG_DATA_DIRS", + _ecore_desktop_paths_get(ECORE_DESKTOP_PATHS_KDE_LEGACY, NULL, "XDG_DATA_HOME", "XDG_DATA_DIRS", "~/.local/share:~/.kde/share", "/usr/local/share:/usr/share", "applnk", @@ -190,7 +225,7 @@ char *gnome; ecore_desktop_paths_icons = - _ecore_desktop_paths_get("~/.e/e/icons:~/.icons", "XDG_DATA_HOME", + _ecore_desktop_paths_get(ECORE_DESKTOP_PATHS_ICONS, "~/.icons", "XDG_DATA_HOME", "XDG_DATA_DIRS", "~/.local/share:~/.kde/share", "/usr/local/share:/usr/share:/usr/X11R6/share", "icons:pixmaps", "dist/icons", "icon:pixmap"); @@ -206,42 +241,32 @@ } if (!ecore_desktop_paths_menus) ecore_desktop_paths_menus = - _ecore_desktop_paths_get(NULL, "XDG_CONFIG_HOME", "XDG_CONFIG_DIRS", + _ecore_desktop_paths_get(ECORE_DESKTOP_PATHS_MENUS, NULL, "XDG_CONFIG_HOME", "XDG_CONFIG_DIRS", "~/.config", "/etc/xdg:/var/lib/menu-xdg", "menus", NULL, "xdgconf-menu"); if (!ecore_desktop_paths_directories) ecore_desktop_paths_directories = - _ecore_desktop_paths_get(NULL, "XDG_DATA_HOME", "XDG_DATA_DIRS", + _ecore_desktop_paths_get(ECORE_DESKTOP_PATHS_DIRECTORIES, NULL, "XDG_DATA_HOME", "XDG_DATA_DIRS", "~/.local/share:~/.kde/share", "/usr/local/share:/usr/share", "desktop-directories", "gnome/vfolders", "xdgdata-dirs"); if (!ecore_desktop_paths_config) ecore_desktop_paths_config = - _ecore_desktop_paths_get(NULL, "XDG_CONFIG_HOME", "XDG_CONFIG_DIRS", + _ecore_desktop_paths_get(ECORE_DESKTOP_PATHS_CONFIG, NULL, "XDG_CONFIG_HOME", "XDG_CONFIG_DIRS", "~/.config", "/etc/xdg", "", NULL, NULL); if (!ecore_desktop_paths_xsessions) ecore_desktop_paths_xsessions = - _ecore_desktop_paths_get(NULL, "XDG_DATA_HOME", "XDG_DATA_DIRS", + _ecore_desktop_paths_get(ECORE_DESKTOP_PATHS_XSESSIONS, NULL, "XDG_DATA_HOME", "XDG_DATA_DIRS", "~/.local/share:~/.kde/share", "/usr/local/share:/usr/share", "xsessions", NULL, NULL); - -#if defined GNOME_SUPPORT || defined KDE_SUPPORT - if (exit_handler) - ecore_event_handler_del(exit_handler); -#endif - free(home); - - return init_count; } -EAPI int -ecore_desktop_paths_shutdown() +static void +_ecore_desktop_paths_destroy() { - if (--init_count != 0) return init_count; - E_FN_DEL(ecore_list_destroy, ecore_desktop_paths_xsessions); E_FN_DEL(ecore_list_destroy, ecore_desktop_paths_config); E_FN_DEL(ecore_list_destroy, ecore_desktop_paths_directories); @@ -249,9 +274,60 @@ E_FN_DEL(ecore_list_destroy, ecore_desktop_paths_icons); E_FN_DEL(ecore_list_destroy, ecore_desktop_paths_kde_legacy); E_FN_DEL(ecore_list_destroy, ecore_desktop_paths_desktops); - E_FN_DEL(ecore_list_destroy, gnome_data); +} - return init_count; +EAPI void +ecore_desktop_paths_extras_clear() +{ + int i; + + for (i = 0; i < ECORE_DESKTOP_PATHS_MAX; i++) + { + E_FN_DEL(ecore_list_destroy, prepend_user_paths[i]); + E_FN_DEL(ecore_list_destroy, prepend_system_paths[i]); + E_FN_DEL(ecore_list_destroy, append_user_paths[i]); + E_FN_DEL(ecore_list_destroy, append_system_paths[i]); + prepend_user_paths[i] = ecore_list_new(); + if (prepend_user_paths[i]) + ecore_list_set_free_cb(prepend_user_paths[i], free); + prepend_system_paths[i] = ecore_list_new(); + if (prepend_system_paths[i]) + ecore_list_set_free_cb(prepend_system_paths[i], free); + append_user_paths[i] = ecore_list_new(); + if (append_user_paths[i]) + ecore_list_set_free_cb(append_user_paths[i], free); + append_system_paths[i] = ecore_list_new(); + if (append_system_paths[i]) + ecore_list_set_free_cb(append_system_paths[i], free); + } +} + +EAPI void +ecore_desktop_paths_prepend_user(Ecore_Desktop_Paths_Type type, char *paths) +{ + if (prepend_user_paths[type]) + ecore_list_append(prepend_user_paths[type], strdup(paths)); +} + +EAPI void +ecore_desktop_paths_prepend_system(Ecore_Desktop_Paths_Type type, char *paths) +{ + if (prepend_system_paths[type]) + ecore_list_append(prepend_system_paths[type], strdup(paths)); +} + +EAPI void +ecore_desktop_paths_append_user(Ecore_Desktop_Paths_Type type, char *paths) +{ + if (append_user_paths[type]) + ecore_list_append(append_user_paths[type], strdup(paths)); +} + +EAPI void +ecore_desktop_paths_append_system(Ecore_Desktop_Paths_Type type, char *paths) +{ + if (append_system_paths[type]) + ecore_list_append(append_system_paths[type], strdup(paths)); } /** Search for a file in fdo compatible locations. @@ -314,7 +390,8 @@ */ static Ecore_List * -_ecore_desktop_paths_get(char *before, char *env_home, char *env, +_ecore_desktop_paths_get(Ecore_Desktop_Paths_Type path_type, + char *before, char *env_home, char *env, char *env_home_default, char *env_default, char *type, char *gnome_extra, char *kde) { @@ -344,6 +421,7 @@ Ecore_List *env_list; ecore_list_set_free_cb(paths, free); + if (before) { Ecore_List *befores; @@ -364,6 +442,18 @@ } } + if (prepend_user_paths[path_type]) + { + char *this_path; + + ecore_list_goto_first(prepend_user_paths[path_type]); + while ((this_path = ecore_list_next(prepend_user_paths[path_type])) != NULL) + { + _ecore_desktop_paths_massage_path(path, home, this_path, NULL); + _ecore_desktop_paths_check_and_add(paths, path); + } + } + if (env_home) { char *value; @@ -392,6 +482,30 @@ } } + if (append_user_paths[path_type]) + { + char *this_path; + + ecore_list_goto_first(append_user_paths[path_type]); + while ((this_path = ecore_list_next(append_user_paths[path_type])) != NULL) + { + _ecore_desktop_paths_massage_path(path, home, this_path, NULL); + _ecore_desktop_paths_check_and_add(paths, path); + } + } + + if (prepend_system_paths[path_type]) + { + char *this_path; + + ecore_list_goto_first(prepend_system_paths[path_type]); + while ((this_path = ecore_list_next(prepend_system_paths[path_type])) != NULL) + { + _ecore_desktop_paths_massage_path(path, home, this_path, NULL); + _ecore_desktop_paths_check_and_add(paths, path); + } + } + if (env) { char *value; @@ -420,6 +534,18 @@ } } + if (append_system_paths[path_type]) + { + char *this_path; + + ecore_list_goto_first(append_system_paths[path_type]); + while ((this_path = ecore_list_next(append_system_paths[path_type])) != NULL) + { + _ecore_desktop_paths_massage_path(path, home, this_path, NULL); + _ecore_desktop_paths_check_and_add(paths, path); + } + } + /* * Get the pathlist from the config file - type=pathlist * for each path in config @@ -853,13 +979,14 @@ switch (type) { - case ECORE_DESKTOP_PATHS_CONFIG : list = ecore_desktop_paths_config; - case ECORE_DESKTOP_PATHS_MENUS : list = ecore_desktop_paths_menus; - case ECORE_DESKTOP_PATHS_DIRECTORIES : list = ecore_desktop_paths_directories; - case ECORE_DESKTOP_PATHS_DESKTOPS : list = ecore_desktop_paths_desktops; - case ECORE_DESKTOP_PATHS_ICONS : list = ecore_desktop_paths_icons; - case ECORE_DESKTOP_PATHS_KDE_LEGACY : list = ecore_desktop_paths_kde_legacy; - case ECORE_DESKTOP_PATHS_XSESSIONS : list = ecore_desktop_paths_xsessions; + case ECORE_DESKTOP_PATHS_CONFIG : list = ecore_desktop_paths_config; break; + case ECORE_DESKTOP_PATHS_MENUS : list = ecore_desktop_paths_menus; break; + case ECORE_DESKTOP_PATHS_DIRECTORIES : list = ecore_desktop_paths_directories; break; + case ECORE_DESKTOP_PATHS_DESKTOPS : list = ecore_desktop_paths_desktops; break; + case ECORE_DESKTOP_PATHS_ICONS : list = ecore_desktop_paths_icons; break; + case ECORE_DESKTOP_PATHS_KDE_LEGACY : list = ecore_desktop_paths_kde_legacy; break; + case ECORE_DESKTOP_PATHS_XSESSIONS : list = ecore_desktop_paths_xsessions; break; + case ECORE_DESKTOP_PATHS_MAX : break; } if (list) return ecore_list_for_each(list, function, user_data); ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs