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);
|
efreet_desktop_cache = ecore_hash_new(ecore_str_hash, ecore_str_compare);
|
||||||
ecore_hash_set_free_key(efreet_desktop_cache, ECORE_FREE_CB(free));
|
ecore_hash_set_free_key(efreet_desktop_cache, ECORE_FREE_CB(free));
|
||||||
|
#if 0
|
||||||
ecore_hash_set_free_value(efreet_desktop_cache,
|
ecore_hash_set_free_value(efreet_desktop_cache,
|
||||||
ECORE_FREE_CB(efreet_desktop_free));
|
ECORE_FREE_CB(efreet_desktop_free));
|
||||||
|
#endif
|
||||||
|
|
||||||
efreet_desktop_types = ecore_list_new();
|
efreet_desktop_types = ecore_list_new();
|
||||||
ecore_list_set_free_cb(efreet_desktop_types,
|
ecore_list_set_free_cb(efreet_desktop_types,
|
||||||
|
@ -219,6 +221,18 @@ efreet_desktop_get(const char *file)
|
||||||
return desktop;
|
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
|
* @param file: The file to create the Efreet_Desktop from
|
||||||
* @return Returns a new empty_Efreet_Desktop on success, NULL on failure
|
* @return Returns a new empty_Efreet_Desktop on success, NULL on failure
|
||||||
|
@ -460,7 +474,7 @@ efreet_desktop_free(Efreet_Desktop *desktop)
|
||||||
desktop->ref--;
|
desktop->ref--;
|
||||||
if (desktop->ref > 0) return;
|
if (desktop->ref > 0) return;
|
||||||
|
|
||||||
if (desktop->cached)
|
if (desktop->cached && efreet_desktop_cache)
|
||||||
ecore_hash_remove(efreet_desktop_cache, desktop->orig_path);
|
ecore_hash_remove(efreet_desktop_cache, desktop->orig_path);
|
||||||
|
|
||||||
IF_FREE(desktop->orig_path);
|
IF_FREE(desktop->orig_path);
|
||||||
|
|
|
@ -100,6 +100,7 @@ struct Efreet_Desktop
|
||||||
};
|
};
|
||||||
|
|
||||||
Efreet_Desktop *efreet_desktop_get(const char *file);
|
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_empty_new(const char *file);
|
||||||
Efreet_Desktop *efreet_desktop_new(const char *file);
|
Efreet_Desktop *efreet_desktop_new(const char *file);
|
||||||
void efreet_desktop_free(Efreet_Desktop *desktop);
|
void efreet_desktop_free(Efreet_Desktop *desktop);
|
||||||
|
|
Loading…
Reference in New Issue