diff --git a/src/E.h b/src/E.h index d31ea0f9..24417de9 100644 --- a/src/E.h +++ b/src/E.h @@ -516,6 +516,7 @@ void StartupWindowsCreate(void); void StartupWindowsOpen(void); /* theme.c */ +char *ThemeFind(const char *theme); char *ThemePathName(const char *path); void ThemePathFind(void); char **ThemesList(int *num); diff --git a/src/config.c b/src/config.c index 0360408c..14063b93 100644 --- a/src/config.c +++ b/src/config.c @@ -223,14 +223,14 @@ ConfigAlertLoad(const char *txt) } static int -ConfigFilePreparse(const char *path, const char *dest) +ConfigFilePreparse(const char *src, const char *dst, const char *themepath) { char execline[FILEPATH_LEN_MAX]; const char *epp_path = ENLIGHTENMENT_BIN "/epp"; char *def_home, *def_user, *def_shell; if (EDebug(EDBUG_TYPE_CONFIG)) - Eprintf("ConfigFilePreparse %s -> %s\n", path, dest); + Eprintf("ConfigFilePreparse %s -> %s\n", src, dst); def_home = homedir(getuid()); def_user = username(getuid()); @@ -246,18 +246,18 @@ ConfigFilePreparse(const char *path, const char *dest) "-D SCREEN_DEPTH_%i=1 " "-D USER_NAME=%s " "-D HOME_DIR=%s " "-D USER_SHELL=%s " "-D ENLIGHTENMENT_VERSION_015=1 " "%s %s", - epp_path, EDirRoot(), Mode.theme.path, EDirRoot(), + epp_path, EDirRoot(), themepath, EDirRoot(), E_PKG_VERSION, EDirRoot(), EDirBin(), - Mode.theme.path, EDirUser(), EDirUserCache(), + themepath, EDirUser(), EDirUserCache(), WinGetW(VROOT), WinGetH(VROOT), WinGetW(VROOT), WinGetH(VROOT), - WinGetDepth(VROOT), def_user, def_home, def_shell, path, dest); + WinGetDepth(VROOT), def_user, def_home, def_shell, src, dst); system(execline); Efree(def_user); Efree(def_shell); Efree(def_home); - return exists(dest) ? 0 : 1; + return exists(dst) ? 0 : 1; } /* Split the process of finding the file from the process of loading it */ @@ -493,7 +493,7 @@ ConfigFileFind(const char *name, const char *themepath, int pp) goto done; /* No preparesd file or source is newer. Do preparsing. */ - err = ConfigFilePreparse(fullname, ppfile); + err = ConfigFilePreparse(fullname, ppfile, themepath); if (err) { Efree(ppfile); diff --git a/src/sound.c b/src/sound.c index ccc6a43d..49da0892 100644 --- a/src/sound.c +++ b/src/sound.c @@ -42,6 +42,12 @@ static struct { char *theme; } Conf_sound; +static struct { + char *theme_path; +} Mode_sound; + +#define SOUND_THEME_PATH ((Mode_sound.theme_path) ? Mode_sound.theme_path : Mode.theme.path) + static Ecore_List *sound_list = NULL; #if USE_MODULES @@ -113,7 +119,7 @@ SclassApply(SoundClass * sclass) { char *file; - file = FindFile(sclass->file, Mode.theme.path); + file = FindFile(sclass->file, SOUND_THEME_PATH); if (file) { sclass->sample = ops->SampleLoad(file); @@ -205,6 +211,12 @@ SoundInit(void) "communicating with the audio server (Esound). Audio will\n" "now be disabled.\n")); } + + Efree(Mode_sound.theme_path); + if (Conf_sound.theme) + Mode_sound.theme_path = ThemeFind(Conf_sound.theme); + else + Mode_sound.theme_path = NULL; } static void @@ -264,10 +276,11 @@ SoundSighan(int sig, void *prm __UNUSED__) switch (sig) { case ESIGNAL_INIT: + memset(&Mode_sound, 0, sizeof(Mode_sound)); SoundInit(); break; case ESIGNAL_CONFIGURE: - ConfigFileLoad("sound.cfg", Mode.theme.path, SoundConfigLoad, 1); + ConfigFileLoad("sound.cfg", SOUND_THEME_PATH, SoundConfigLoad, 1); break; case ESIGNAL_START: if (!Conf_sound.enable) diff --git a/src/theme.c b/src/theme.c index f6d0f2d5..549374f6 100644 --- a/src/theme.c +++ b/src/theme.c @@ -260,7 +260,7 @@ ThemeExtract(const char *path) return NULL; } -static char * +char * ThemeFind(const char *theme) { static const char *const default_themes[] = {