From 7fa09b763bee3d4b76b98d9796e1cde12b448aca Mon Sep 17 00:00:00 2001 From: Sebastian Dransfeld Date: Wed, 8 Aug 2012 19:39:55 +0000 Subject: [PATCH] efreet: Fix language change 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 | 1 + legacy/efreet/src/lib/efreet_cache.c | 63 ++++++++++++++++++++-------------- legacy/efreet/src/lib/efreet_private.h | 1 + 3 files changed, 39 insertions(+), 26 deletions(-) diff --git a/legacy/efreet/src/lib/efreet.c b/legacy/efreet/src/lib/efreet.c index 906d879..c48223f 100644 --- a/legacy/efreet/src/lib/efreet.c +++ b/legacy/efreet/src/lib/efreet.c @@ -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(); } diff --git a/legacy/efreet/src/lib/efreet_cache.c b/legacy/efreet/src/lib/efreet_cache.c index 9e84fbc..a53c8e1 100644 --- a/legacy/efreet/src/lib/efreet_cache.c +++ b/legacy/efreet/src/lib/efreet_cache.c @@ -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); } diff --git a/legacy/efreet/src/lib/efreet_private.h b/legacy/efreet/src/lib/efreet_private.h index 131785b..ac43c4a 100644 --- a/legacy/efreet/src/lib/efreet_private.h +++ b/legacy/efreet/src/lib/efreet_private.h @@ -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); -- 2.7.4