diff --git a/src/lib/efreet/efreet_cache.c b/src/lib/efreet/efreet_cache.c index bba77d44a3..88fda2e6a3 100644 --- a/src/lib/efreet/efreet_cache.c +++ b/src/lib/efreet/efreet_cache.c @@ -146,10 +146,63 @@ _cb_server_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) s = efreet_language_get(); if (s) len = strlen(s); ecore_ipc_server_send(ipc, 1, 0, 0, 0, 0, s, len); + efreet_icon_extensions_refresh(); } return ECORE_CALLBACK_DONE; } +static void +_icon_desktop_cache_update_event_add(int event_type) +{ + Efreet_Event_Cache_Update *ev; + Efreet_Old_Cache *d = NULL; + Eina_List *l = NULL; + + efreet_cache_desktop_close(); + + ev = NEW(Efreet_Event_Cache_Update, 1); + if (!ev) return; + + IF_RELEASE(theme_name); + + // Save all old caches + d = NEW(Efreet_Old_Cache, 1); + if (d) + { + d->hash = themes; + d->ef = icon_theme_cache; + l = eina_list_append(l, d); + } + + d = NEW(Efreet_Old_Cache, 1); + if (d) + { + d->hash = icons; + d->ef = icon_cache; + l = eina_list_append(l, d); + } + + d = NEW(Efreet_Old_Cache, 1); + if (d) + { + d->hash = fallbacks; + d->ef = fallback_cache; + l = eina_list_append(l, d); + } + + // Create new empty caches + themes = eina_hash_string_superfast_new(EINA_FREE_CB(efreet_cache_icon_theme_free)); + icons = eina_hash_string_superfast_new(EINA_FREE_CB(efreet_cache_icon_free)); + fallbacks = eina_hash_string_superfast_new(EINA_FREE_CB(efreet_cache_icon_fallback_free)); + + icon_theme_cache = NULL; + icon_cache = NULL; + fallback_cache = NULL; + + // Send event + ecore_event_add(event_type, ev, icon_cache_update_free, l); +} + static Eina_Bool _cb_server_data(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) { @@ -162,69 +215,14 @@ _cb_server_data(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) else if (e->major == 2) // icon cache update { if (e->minor == 1) - { - Efreet_Event_Cache_Update *ev; - - efreet_cache_desktop_close(); - - ev = NEW(Efreet_Event_Cache_Update, 1); - if (ev) - ecore_event_add(EFREET_EVENT_DESKTOP_CACHE_UPDATE, ev, NULL, NULL); - } + _icon_desktop_cache_update_event_add(EFREET_EVENT_ICON_CACHE_UPDATE); else - ecore_event_add(EFREET_EVENT_DESKTOP_CACHE_BUILD, NULL, NULL, NULL); + ecore_event_add(EFREET_EVENT_ICON_CACHE_UPDATE, NULL, NULL, NULL); } else if (e->major == 3) // desktop cache update { - Efreet_Event_Cache_Update *ev = NULL; - Efreet_Old_Cache *d = NULL; - Eina_List *l = NULL; - - if (e->minor == 1) - { - ev = NEW(Efreet_Event_Cache_Update, 1); - if (!ev) goto error; - - IF_RELEASE(theme_name); - - // Save all old caches - d = NEW(Efreet_Old_Cache, 1); - if (!d) goto error; - d->hash = themes; - d->ef = icon_theme_cache; - l = eina_list_append(l, d); - - d = NEW(Efreet_Old_Cache, 1); - if (!d) goto error; - d->hash = icons; - d->ef = icon_cache; - l = eina_list_append(l, d); - - d = NEW(Efreet_Old_Cache, 1); - if (!d) goto error; - d->hash = fallbacks; - d->ef = fallback_cache; - l = eina_list_append(l, d); - - // Create new empty caches - themes = eina_hash_string_superfast_new(EINA_FREE_CB(efreet_cache_icon_theme_free)); - icons = eina_hash_string_superfast_new(EINA_FREE_CB(efreet_cache_icon_free)); - fallbacks = eina_hash_string_superfast_new(EINA_FREE_CB(efreet_cache_icon_fallback_free)); - - icon_theme_cache = NULL; - icon_cache = NULL; - fallback_cache = NULL; - - // Send event - ecore_event_add(EFREET_EVENT_ICON_CACHE_UPDATE, ev, icon_cache_update_free, l); - goto done; - } -error: - IF_FREE(ev); - EINA_LIST_FREE(l, d) - free(d); + _icon_desktop_cache_update_event_add(EFREET_EVENT_DESKTOP_CACHE_UPDATE); } -done: return ECORE_CALLBACK_DONE; } diff --git a/src/lib/efreet/efreet_icon.c b/src/lib/efreet/efreet_icon.c index 3cb7f5c8f5..89805201a4 100644 --- a/src/lib/efreet/efreet_icon.c +++ b/src/lib/efreet/efreet_icon.c @@ -62,7 +62,7 @@ efreet_icon_init(void) efreet_icon_extensions = eina_list_append(efreet_icon_extensions, eina_stringshare_add(default_exts[i])); efreet_extra_icon_dirs = NULL; - efreet_cache_icon_exts_add(efreet_icon_extensions); + efreet_icon_extensions_refresh(); return 1; } @@ -85,6 +85,12 @@ efreet_icon_shutdown(void) _efreet_icon_log_dom = -1; } +void +efreet_icon_extensions_refresh(void) +{ + efreet_cache_icon_exts_add(efreet_icon_extensions); +} + EAPI const char * efreet_icon_deprecated_user_dir_get(void) { @@ -143,7 +149,7 @@ efreet_icon_extension_add(const char *ext) } else efreet_icon_extensions = eina_list_prepend(efreet_icon_extensions, ext); - efreet_cache_icon_exts_add(efreet_icon_extensions); + efreet_icon_extensions_refresh(); } EAPI Eina_List ** diff --git a/src/lib/efreet/efreet_private.h b/src/lib/efreet/efreet_private.h index 9455485f2f..139754d81a 100644 --- a/src/lib/efreet/efreet_private.h +++ b/src/lib/efreet/efreet_private.h @@ -197,6 +197,7 @@ void efreet_cache_shutdown(void); int efreet_icon_init(void); void efreet_icon_shutdown(void); +void efreet_icon_extensions_refresh(void); int efreet_menu_init(void); void efreet_menu_shutdown(void);