diff --git a/legacy/efreet/src/lib/efreet_desktop.c b/legacy/efreet/src/lib/efreet_desktop.c index 7cfaf606a3..f527398171 100644 --- a/legacy/efreet/src/lib/efreet_desktop.c +++ b/legacy/efreet/src/lib/efreet_desktop.c @@ -116,8 +116,10 @@ efreet_desktop_init(void) efreet_desktop_cache = ecore_hash_new(ecore_str_hash, ecore_str_compare); ecore_hash_set_free_key(efreet_desktop_cache, ECORE_FREE_CB(free)); +#if 0 ecore_hash_set_free_value(efreet_desktop_cache, ECORE_FREE_CB(efreet_desktop_free)); +#endif efreet_desktop_types = ecore_list_new(); ecore_list_set_free_cb(efreet_desktop_types, @@ -219,6 +221,18 @@ efreet_desktop_get(const char *file) return desktop; } +/** + * @param desktop: The Efreet_Desktop to ref + * @return Returns the new reference count + */ +int +efreet_desktop_ref(Efreet_Desktop *desktop) +{ + if (!desktop) return 0; + desktop->ref++; + return desktop->ref; +} + /** * @param file: The file to create the Efreet_Desktop from * @return Returns a new empty_Efreet_Desktop on success, NULL on failure @@ -460,7 +474,7 @@ efreet_desktop_free(Efreet_Desktop *desktop) desktop->ref--; if (desktop->ref > 0) return; - if (desktop->cached) + if (desktop->cached && efreet_desktop_cache) ecore_hash_remove(efreet_desktop_cache, desktop->orig_path); IF_FREE(desktop->orig_path); diff --git a/legacy/efreet/src/lib/efreet_desktop.h b/legacy/efreet/src/lib/efreet_desktop.h index b89c5d0914..1f27662b5b 100644 --- a/legacy/efreet/src/lib/efreet_desktop.h +++ b/legacy/efreet/src/lib/efreet_desktop.h @@ -100,6 +100,7 @@ struct Efreet_Desktop }; Efreet_Desktop *efreet_desktop_get(const char *file); +int efreet_desktop_ref(Efreet_Desktop *desktop); Efreet_Desktop *efreet_desktop_empty_new(const char *file); Efreet_Desktop *efreet_desktop_new(const char *file); void efreet_desktop_free(Efreet_Desktop *desktop);