Enlightenment CVS committal Author : dj2 Project : e17 Module : libs/ewl
Dir : e17/libs/ewl/src/lib Modified Files: ewl_embed.c ewl_embed.h ewl_window.c Log Message: - the window code will destroy the evas when it is unrealized. make sure we cleanup the obj_cache just before we destroy our evas as it isn't valid after we destroy. =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_embed.c,v retrieving revision 1.103 retrieving revision 1.104 diff -u -3 -r1.103 -r1.104 --- ewl_embed.c 3 Jan 2007 21:35:35 -0000 1.103 +++ ewl_embed.c 3 Jan 2007 21:59:57 -0000 1.104 @@ -1971,8 +1971,6 @@ void *user_data __UNUSED__) { Ewl_Embed *emb; - Evas_Object *obj; - Ecore_List *key_list; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("w", w); @@ -1982,33 +1980,7 @@ if (ecore_list_goto(ewl_embed_list, w)) ecore_list_remove(ewl_embed_list); - if (emb->obj_cache) - { - key_list = ecore_hash_keys(emb->obj_cache); - if (key_list) { - char *key; - /* - * Iterate over all object types destroying them as we go. No - * need to free the key string. - */ - while ((key = ecore_list_remove_first(key_list))) { - Ecore_List *obj_list; - - /* - * Now queue all objects for destruction. - */ - obj_list = ecore_hash_remove(emb->obj_cache, key); - while ((obj = ecore_list_remove_first(obj_list))) - ewl_evas_object_destroy(obj); - ecore_list_destroy(obj_list); - } - - ecore_list_destroy(key_list); - } - } - - if (emb->obj_cache) ecore_hash_destroy(emb->obj_cache); - emb->obj_cache = NULL; + ewl_embed_cache_cleanup(emb); ecore_dlist_destroy(emb->tab_order); emb->tab_order = NULL; @@ -2054,6 +2026,51 @@ if (REALIZED(embed) && (embed->dnd_count == 0)) ewl_engine_embed_dnd_aware_set(embed); */ embed->dnd_count--; + + DLEAVE_FUNCTION(DLEVEL_STABLE); +} + +/** + * @param emb: The embed to work with + * @return Returns no value + * @brief This will destroy the object cache associated with the embed object + */ +void +ewl_embed_cache_cleanup(Ewl_Embed *emb) +{ + Evas_Object *obj; + Ecore_List *key_list; + + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("emb", emb); + DCHECK_TYPE("emb", emb, EWL_EMBED_TYPE); + + if (!emb->obj_cache) DRETURN(DLEVEL_STABLE); + + key_list = ecore_hash_keys(emb->obj_cache); + if (key_list) { + char *key; + /* + * Iterate over all object types destroying them as we go. No + * need to free the key string. + */ + while ((key = ecore_list_remove_first(key_list))) { + Ecore_List *obj_list; + + /* + * Now queue all objects for destruction. + */ + obj_list = ecore_hash_remove(emb->obj_cache, key); + while ((obj = ecore_list_remove_first(obj_list))) + ewl_evas_object_destroy(obj); + ecore_list_destroy(obj_list); + } + + ecore_list_destroy(key_list); + } + + ecore_hash_destroy(emb->obj_cache); + emb->obj_cache = NULL; DLEAVE_FUNCTION(DLEVEL_STABLE); } =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_embed.h,v retrieving revision 1.38 retrieving revision 1.39 diff -u -3 -r1.38 -r1.39 --- ewl_embed.h 2 Jan 2007 17:01:44 -0000 1.38 +++ ewl_embed.h 3 Jan 2007 21:59:57 -0000 1.39 @@ -162,6 +162,8 @@ void ewl_embed_dnd_aware_set(Ewl_Embed *embed); void ewl_embed_dnd_aware_remove(Ewl_Embed *embed); +void ewl_embed_cache_cleanup(Ewl_Embed *emb); + /* * Internally used callbacks, override at your own risk. */ =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_window.c,v retrieving revision 1.65 retrieving revision 1.66 diff -u -3 -r1.65 -r1.66 --- ewl_window.c 13 Dec 2006 22:29:44 -0000 1.65 +++ ewl_window.c 3 Jan 2007 21:59:57 -0000 1.66 @@ -741,14 +741,15 @@ embed = EWL_EMBED(w); win = EWL_WINDOW(w); + ewl_embed_cache_cleanup(embed); + ewl_evas_destroy(embed->evas); + embed->evas = NULL; + if (REALIZED(w)) { ewl_engine_window_hide(win); ewl_engine_window_destroy(win); } - - ewl_evas_destroy(embed->evas); - embed->evas = NULL; DLEAVE_FUNCTION(DLEVEL_STABLE); } ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs