- 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:
Sebastian Dransfeld 2007-06-22 09:39:58 +00:00
parent a3ab006950
commit 68159d9bdd
2 changed files with 16 additions and 1 deletions

View File

@ -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);

View File

@ -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);