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