forked from enlightenment/efl
- Add ref function.
- Don't free Efreet_Desktops on shutdown, this is the responsibility of those who do efreet_desktop_get. If we free them here, there will be a problem with the events in efreet_util, as the events might try to free the Efreet_Desktops during ecore_shutdown. - Check if the cache exists before trying to remove a Efreet_Desktop, as we might try to free a Efreet_Desktop after efreet_shutdown. SVN revision: 30428
This commit is contained in:
parent
a3ab006950
commit
68159d9bdd
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue