efreet: Improve language reset
authorenglebass <englebass@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 25 Jun 2012 17:12:35 +0000 (17:12 +0000)
committerenglebass <englebass@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 25 Jun 2012 17:12:35 +0000 (17:12 +0000)
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
src/lib/Efreet.h
src/lib/efreet.c
src/lib/efreet_base.c
src/lib/efreet_base.h
src/lib/efreet_cache.c
src/lib/efreet_private.h

index d91bb59..99c665b 100644 (file)
@@ -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
index 9013d0b..6d3f96d 100644 (file)
@@ -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
index 7d2f363..2f1ae17 100644 (file)
@@ -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");
 }
 
 /**
index cb476d6..01a8e57 100644 (file)
@@ -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);
 }
 
 /**
index 429ba28..0eb3d52 100644 (file)
@@ -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;
index 1bebed8..497d2fb 100644 (file)
@@ -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 */
index a7106dc..98bd45e 100644 (file)
@@ -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);