From b69f38cec792e263e969f18ca57a0f7294d50603 Mon Sep 17 00:00:00 2001 From: englebass Date: Mon, 25 Jun 2012 17:12:35 +0000 Subject: [PATCH] efreet: Improve language reset efreet.c: Reset parsed locale, and force a reparse of LANG env efreet_cache.c: Close desktop cache so we reopen cache with correct language git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/efreet@72817 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- .gitignore | 1 + src/lib/Efreet.h | 7 +++++ src/lib/efreet.c | 20 +++++++++++--- src/lib/efreet_base.c | 14 ++-------- src/lib/efreet_base.h | 7 ----- src/lib/efreet_cache.c | 72 +++++++++++++++++++++++++++++------------------- src/lib/efreet_private.h | 2 ++ 7 files changed, 72 insertions(+), 51 deletions(-) diff --git a/.gitignore b/.gitignore index d91bb59..99c665b 100644 --- a/.gitignore +++ b/.gitignore @@ -147,5 +147,6 @@ src/tests/efreet_test /po/quot.sed /po/remove-potcdate.sed /po/remove-potcdate.sin +/po/*.gmo /po/stamp-po /stamp-h1 diff --git a/src/lib/Efreet.h b/src/lib/Efreet.h index 9013d0b..6d3f96d 100644 --- a/src/lib/Efreet.h +++ b/src/lib/Efreet.h @@ -93,6 +93,13 @@ EAPI int efreet_init(void); */ EAPI int efreet_shutdown(void); +/** + * @brief Resets language dependent variables and resets language dependent + * caches This must be called whenever the locale is changed. + * @since 1.3 + */ +EAPI void efreet_lang_reset(void); + #ifdef __cplusplus } #endif diff --git a/src/lib/efreet.c b/src/lib/efreet.c index 7d2f363..2f1ae17 100644 --- a/src/lib/efreet.c +++ b/src/lib/efreet.c @@ -166,7 +166,19 @@ efreet_shutdown(void) return _efreet_init_count; } -/** +EAPI void +efreet_lang_reset(void) +{ + IF_RELEASE(efreet_lang); + IF_RELEASE(efreet_lang_country); + IF_RELEASE(efreet_lang_modifier); + efreet_parsed_locale = 0; /* reset this in case they init efreet again */ + + efreet_dirs_reset(); + efreet_cache_desktop_reset(); +} + + /** * @internal * @return Returns the current users language setting or NULL if none set * @brief Retrieves the current language setting @@ -220,13 +232,13 @@ efreet_parse_locale(void) { efreet_parsed_locale = 1; - if (efreet_parse_locale_setting("LC_ALL")) + if (efreet_parse_locale_setting("LANG")) return; - if (efreet_parse_locale_setting("LC_MESSAGES")) + if (efreet_parse_locale_setting("LC_ALL")) return; - efreet_parse_locale_setting("LANG"); + efreet_parse_locale_setting("LC_MESSAGES"); } /** diff --git a/src/lib/efreet_base.c b/src/lib/efreet_base.c index cb476d6..01a8e57 100644 --- a/src/lib/efreet_base.c +++ b/src/lib/efreet_base.c @@ -187,20 +187,10 @@ efreet_hostname_get(void) return hostname; } -EAPI void +void efreet_dirs_reset(void) { - const char *s; - eina_stringshare_replace(&hostname, NULL); - eina_stringshare_replace(&xdg_desktop_dir, NULL); - eina_stringshare_replace(&xdg_cache_home, NULL); - eina_stringshare_replace(&xdg_config_home, NULL); - eina_stringshare_replace(&xdg_data_home, NULL); - eina_stringshare_replace(&efreet_home_dir, NULL); - EINA_LIST_FREE(xdg_data_dirs, s) - eina_stringshare_del(s); - EINA_LIST_FREE(xdg_config_dirs, s) - eina_stringshare_del(s); + eina_stringshare_replace(&xdg_desktop_dir, NULL); } /** diff --git a/src/lib/efreet_base.h b/src/lib/efreet_base.h index 429ba28..0eb3d52 100644 --- a/src/lib/efreet_base.h +++ b/src/lib/efreet_base.h @@ -66,13 +66,6 @@ EAPI const char *efreet_cache_home_get(void); EAPI const char *efreet_hostname_get(void); /** - * @brief Resets all the stored env variables. This must be called whenever the - * locale is changed. - * @since 1.3 - */ -EAPI void efreet_dirs_reset(void); - -/** * Efreet_Event_Cache_Update */ typedef struct _Efreet_Event_Cache_Update Efreet_Event_Cache_Update; diff --git a/src/lib/efreet_cache.c b/src/lib/efreet_cache.c index 1bebed8..497d2fb 100644 --- a/src/lib/efreet_cache.c +++ b/src/lib/efreet_cache.c @@ -942,6 +942,49 @@ efreet_cache_desktop_dirs(void) } void +efreet_cache_desktop_reset(void) +{ + Eina_List *l = NULL; + Efreet_Event_Cache_Update *ev = NULL; + Efreet_Old_Cache *d = NULL; + + IF_RELEASE(util_cache_names_key); + IF_RELEASE(util_cache_hash_key); + + if ((desktop_cache) && (desktop_cache != NON_EXISTING)) + { + d = NEW(Efreet_Old_Cache, 1); + if (!d) goto error; + d->hash = desktops; + d->ef = desktop_cache; + old_desktop_caches = eina_list_append(old_desktop_caches, d); + + desktops = eina_hash_string_superfast_new(NULL); + } + desktop_cache = NULL; + + efreet_cache_array_string_free(util_cache_names); + util_cache_names = NULL; + + if (util_cache_hash) + { + eina_hash_free(util_cache_hash->hash); + free(util_cache_hash); + util_cache_hash = NULL; + } + + util_cache = efreet_cache_close(util_cache); + + ecore_event_add(EFREET_EVENT_DESKTOP_CACHE_UPDATE, ev, desktop_cache_update_free, d); + return; +error: + IF_FREE(ev); + IF_FREE(d); + EINA_LIST_FREE(l, d) + free(d); +} + +void efreet_cache_desktop_update(void) { if (!efreet_cache_update) return; @@ -1117,34 +1160,7 @@ cache_update_cb(void *data __UNUSED__, Ecore_File_Monitor *em __UNUSED__, if (!ev) goto error; if (cache_check_change(path)) { - IF_RELEASE(util_cache_names_key); - IF_RELEASE(util_cache_hash_key); - - if ((desktop_cache) && (desktop_cache != NON_EXISTING)) - { - d = NEW(Efreet_Old_Cache, 1); - if (!d) goto error; - d->hash = desktops; - d->ef = desktop_cache; - old_desktop_caches = eina_list_append(old_desktop_caches, d); - - desktops = eina_hash_string_superfast_new(NULL); - } - desktop_cache = NULL; - - efreet_cache_array_string_free(util_cache_names); - util_cache_names = NULL; - - if (util_cache_hash) - { - eina_hash_free(util_cache_hash->hash); - free(util_cache_hash); - util_cache_hash = NULL; - } - - util_cache = efreet_cache_close(util_cache); - - ecore_event_add(EFREET_EVENT_DESKTOP_CACHE_UPDATE, ev, desktop_cache_update_free, d); + efreet_cache_desktop_reset(); } ecore_event_add(EFREET_EVENT_DESKTOP_CACHE_BUILD, NULL, NULL, NULL); /* TODO: Check if desktop_dirs_add exists, and rebuild cache if */ diff --git a/src/lib/efreet_private.h b/src/lib/efreet_private.h index a7106dc..98bd45e 100644 --- a/src/lib/efreet_private.h +++ b/src/lib/efreet_private.h @@ -186,6 +186,7 @@ int efreet_util_init(void); int efreet_util_shutdown(void); const char *efreet_home_dir_get(void); +void efreet_dirs_reset(void); const char *efreet_lang_get(void); const char *efreet_lang_country_get(void); @@ -202,6 +203,7 @@ Efreet_Desktop *efreet_cache_desktop_find(const char *file); void efreet_cache_desktop_free(Efreet_Desktop *desktop); void efreet_cache_desktop_add(Efreet_Desktop *desktop); Efreet_Cache_Array_String *efreet_cache_desktop_dirs(void); +void efreet_cache_desktop_reset(void); Efreet_Cache_Icon *efreet_cache_icon_find(Efreet_Icon_Theme *theme, const char *icon); Efreet_Cache_Fallback_Icon *efreet_cache_icon_fallback_find(const char *icon); -- 2.7.4