Enlightenment CVS committal

Author  : barbieri
Project : e17
Module  : proto/python-efl

Dir     : e17/proto/python-efl/python-edje/edje


Modified Files:
        edje.c_edje_object.pxi 


Log Message:
Cleanups

 * import traceback just once;
 * check for callable functions in callback connections;
 * help garbage collector releasing references ASAP.


===================================================================
RCS file: /cvs/e/e17/proto/python-efl/python-edje/edje/edje.c_edje_object.pxi,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -3 -r1.15 -r1.16
--- edje.c_edje_object.pxi      2 Sep 2007 15:11:54 -0000       1.15
+++ edje.c_edje_object.pxi      21 Sep 2007 23:42:08 -0000      1.16
@@ -1,5 +1,7 @@
 # This file is included verbatim by edje.c_edje.pyx
 
+import traceback
+
 cdef void text_change_cb(void *data, evas.c_evas.Evas_Object *obj, char *part):
     cdef Edje self
     self = <Edje>data
@@ -9,7 +11,6 @@
     try:
         func(self, part, *args, **kargs)
     except Exception, e:
-        import traceback
         traceback.print_exc()
 
 
@@ -23,7 +24,6 @@
     try:
         func(self, Message_from_type(type, id, msg), *args, **kargs)
     except Exception, e:
-        import traceback
         traceback.print_exc()
 
 
@@ -36,7 +36,6 @@
         try:
             func(self, emission, source, *args, **kargs)
         except Exception, e:
-            import traceback
             traceback.print_exc()
 
 
@@ -84,9 +83,22 @@
         evas.c_evas.Object.__init__(self, canvas)
         if self.obj == NULL:
             self._set_obj(edje_object_add(self._evas.obj))
-            _register_decorated_callbacks(self)
         self._set_common_params(**kargs)
 
+    def __free_wrapper_resources(self, ed):
+        self._signal_callbacks.clear()
+        self._text_change_cb = None
+        self._message_handler_cb = None
+
+    cdef int _set_obj(self, evas.c_evas.Evas_Object *obj) except 0:
+        cdef int r
+        r = evas.c_evas.Object._set_obj(self, obj)
+        if r == 1:
+            self.event_callback_add(evas.c_evas.EVAS_CALLBACK_FREE,
+                                    self.__free_wrapper_resources)
+            _register_decorated_callbacks(self)
+        return r
+
     def _set_common_params(self, file=None, group=None, size=None, pos=None,
                            geometry=None, color=None, name=None):
         if file:
@@ -505,6 +517,9 @@
             raise TypeError("invalid message type '%s'" % type(data).__name__)
 
     def message_handler_set(self, func, *args, **kargs):
+        if not callable(func):
+            raise TypeError("func must be callable")
+
         if func is None:
             self._message_handler_cb = None
             edje_object_message_handler_set(self.obj, NULL, NULL)
@@ -518,6 +533,9 @@
 
     def signal_callback_add(self, char *emission, char *source, func,
                             *args, **kargs):
+        if not callable(func):
+            raise TypeError("func must be callable")
+
         lst = self._signal_callbacks.setdefault((emission, source), [])
         if not lst:
             edje_object_signal_callback_add(self.obj, emission, source,



-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to