Enlightenment CVS committal

Author  : barbieri
Project : e17
Module  : proto

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


Modified Files:
        edje.c_edje.pxd edje.c_edje_object.pxi 


Log Message:
Edje signal callbacks

===================================================================
RCS file: /cvs/e/e17/proto/python-efl/python-edje/edje/edje.c_edje.pxd,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -3 -r1.1.1.1 -r1.2
--- edje.c_edje.pxd     3 May 2007 21:56:05 -0000       1.1.1.1
+++ edje.c_edje.pxd     6 May 2007 17:48:00 -0000       1.2
@@ -236,4 +236,5 @@
 cdef class Edje(evas.c_evas.Object):
     cdef object _text_change_cb
     cdef object _message_handler_cb
+    cdef object _signal_callbacks
 
===================================================================
RCS file: /cvs/e/e17/proto/python-efl/python-edje/edje/edje.c_edje_object.pxi,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- edje.c_edje_object.pxi      6 May 2007 17:47:24 -0000       1.3
+++ edje.c_edje_object.pxi      6 May 2007 17:48:00 -0000       1.4
@@ -19,6 +19,15 @@
     func(self, Message_from_type(type, id, msg), *args, **kargs)
 
 
+cdef void signal_cb(void *data, evas.c_evas.Evas_Object *obj,
+                    char *emission, char *source):
+    cdef Edje self
+    self = <Edje>data
+    lst = self._signal_callbacks[(emission, source)]
+    for func, args, kargs in lst:
+        func(self, emission, source, *args, **kargs)
+
+
 class EdjeLoadError(Exception):
     def __init__(self, int code):
         if code == EDJE_LOAD_ERROR_NONE:
@@ -43,6 +52,9 @@
 
 
 cdef class Edje(evas.c_evas.Object):
+    def __new__(self, evas.c_evas.Canvas evas):
+        self._signal_callbacks = {}
+
     def _new_obj(self):
         if self.obj == NULL:
             self._set_obj(edje_object_add(self._evas.obj))
@@ -264,3 +276,28 @@
 
     def message_signal_process(self):
         edje_object_message_signal_process(self.obj)
+
+    def signal_callback_add(self, char *emission, char *source, func,
+                            *args, **kargs):
+        lst = self._signal_callbacks.setdefault((emission, source), [])
+        if not lst:
+            edje_object_signal_callback_add(self.obj, emission, source,
+                                            signal_cb, <void*>self)
+        lst.append((func, args, kargs))
+
+    def signal_callback_del(self, char *emission, char *source, func):
+        key = (emission, source)
+        lst = self._signal_callbacks[key]
+        i = -1
+        for i, (f, a, k) in enumerate(lst):
+            if func == f:
+                break
+        del lst[i]
+        if not lst:
+            del self._signal_callbacks[key]
+            edje_object_signal_callback_del(self.obj, emission, source,
+                                            signal_cb)
+
+    def signal_emit(self, char *emission, char *source):
+        edje_object_signal_emit(self.obj, emission, source)
+



-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to