efreet: Fix language change
authorSebastian Dransfeld <sd@tango.flipp.net>
Wed, 8 Aug 2012 19:39:55 +0000 (19:39 +0000)
committerSebastian Dransfeld <sd@tango.flipp.net>
Wed, 8 Aug 2012 19:39:55 +0000 (19:39 +0000)
Need to release generated file name, else we will use same filename
again when opening cache.

Also need to close cache, as a cache rebuild might not trigger cache
close if the cache in another language already exists.

SVN revision: 75020

legacy/efreet/src/lib/efreet.c
legacy/efreet/src/lib/efreet_cache.c
legacy/efreet/src/lib/efreet_private.h

index 906d879..c48223f 100644 (file)
@@ -186,6 +186,7 @@ efreet_lang_reset(void)
     efreet_parsed_locale = 0;  /* reset this in case they init efreet again */
 
     efreet_dirs_reset();
+    efreet_cache_desktop_close();
     efreet_cache_desktop_update();
 }
 
index 9e84fbc..a53c8e1 100644 (file)
@@ -953,6 +953,42 @@ efreet_cache_desktop_update(void)
 }
 
 void
+efreet_cache_desktop_close(void)
+{
+    IF_RELEASE(util_cache_names_key);
+    IF_RELEASE(util_cache_hash_key);
+
+    if ((desktop_cache) && (desktop_cache != NON_EXISTING))
+    {
+        Efreet_Old_Cache *d = NEW(Efreet_Old_Cache, 1);
+        if (d)
+        {
+            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);
+
+    IF_RELEASE(desktop_cache_file);
+    IF_RELEASE(util_cache_file);
+}
+
+void
 efreet_cache_icon_update(void)
 {
     if (!efreet_cache_update) return;
@@ -1118,32 +1154,7 @@ cache_update_cb(void *data __UNUSED__, Ecore_File_Monitor *em __UNUSED__,
             ev = NEW(Efreet_Event_Cache_Update, 1);
             if (!ev) goto error;
 
-            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);
+            efreet_cache_desktop_close();
 
             ecore_event_add(EFREET_EVENT_DESKTOP_CACHE_UPDATE, ev, desktop_cache_update_free, d);
         }
index 131785b..ac43c4a 100644 (file)
@@ -195,6 +195,7 @@ const char *efreet_lang_modifier_get(void);
 size_t efreet_array_cat(char *buffer, size_t size, const char *strs[]);
 
 void efreet_cache_desktop_update(void);
+void efreet_cache_desktop_close(void);
 void efreet_cache_icon_update(void);
 
 Efreet_Desktop *efreet_cache_desktop_find(const char *file);