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

Reply via email to