davemds pushed a commit to branch master. http://git.enlightenment.org/bindings/python/python-efl.git/commit/?id=9b5b526620c80c78b6c3391bc92163aa570b2bd3
commit 9b5b526620c80c78b6c3391bc92163aa570b2bd3 Author: Dave Andreoli <d...@gurumeditation.it> Date: Mon Aug 1 17:09:22 2016 +0200 Ecore.Idlers are no more an Eo object in C :( #TheWhiteRabbitIsDead --- efl/ecore/efl.ecore_idler.pxi | 50 ++++++++++++++++++++++++++++++++++--------- include/efl.ecore.pxd | 8 ++++--- 2 files changed, 45 insertions(+), 13 deletions(-) diff --git a/efl/ecore/efl.ecore_idler.pxi b/efl/ecore/efl.ecore_idler.pxi index bb3bed6..4373a74 100644 --- a/efl/ecore/efl.ecore_idler.pxi +++ b/efl/ecore/efl.ecore_idler.pxi @@ -59,22 +59,38 @@ cdef class Idler(Eo): self.func = func self.args = args self.kargs = kargs - self._set_obj(ecore_idler_add(_ecore_task_cb, <void *>self)) + + # From efl 1.18 idlers are no more Eo objects in C, thus + # we cannot use Eo.obj and _set_obj() anymore :( + # self._set_obj(ecore_idler_add(_ecore_task_cb, <void *>self)) + self.obj2 = ecore_idler_add(_ecore_task_cb, <void *>self) + Py_INCREF(self) def __str__(self): - return "%s Idler(func=%s, args=%s, kargs=%s)" % (Eo.__repr__(self), - self.func, self.args, self.kargs) + return "Idler(obj=%#x, func=%s, args=%s, kargs=%s)" % ( + <uintptr_t>self.obj2, self.func, self.args, self.kargs) def __repr__(self): - return "%s Idler(func=%s, args=%s, kargs=%s)" % (Eo.__repr__(self), - self.func, self.args, self.kargs) + return "Idler(obj=%#x, func=%s, args=%s, kargs=%s)" % ( + <uintptr_t>self.obj2, self.func, self.args, self.kargs) cpdef bint _task_exec(self) except *: return self.func(*self.args, **self.kargs) + def is_deleted(self): + """Check if the object has been deleted thus leaving the object shallow. + + :return: True if the object has been deleted yet, False otherwise. + :rtype: bool + + """ + return bool(self.obj2 == NULL) + def delete(self): """Stop callback emission and free internal resources.""" - ecore_idler_del(self.obj) + ecore_idler_del(self.obj2) + self.obj2 = NULL + Py_DECREF(self) def stop(self): """Alias for stop().""" @@ -126,11 +142,18 @@ cdef class IdleEnterer(Idler): self.func = func self.args = args self.kargs = kargs - self._set_obj(ecore_idle_enterer_add(_ecore_task_cb, <void *>self)) + + # From efl 1.18 idlers are no more Eo objects in C, thus + # we cannot use Eo.obj and _set_obj() anymore :( + # self._set_obj(ecore_idle_enterer_add(_ecore_task_cb, <void *>self)) + self.obj2 = ecore_idle_enterer_add(_ecore_task_cb, <void *>self) + Py_INCREF(self) def delete(self): """Stop callback emission and free internal resources.""" - ecore_idle_enterer_del(self.obj) + ecore_idle_enterer_del(self.obj2) + self.obj2 = NULL + Py_DECREF(self) cdef class IdleExiter(Idler): @@ -173,11 +196,18 @@ cdef class IdleExiter(Idler): self.func = func self.args = args self.kargs = kargs - self._set_obj(ecore_idle_exiter_add(_ecore_task_cb, <void *>self)) + + # From efl 1.18 idlers are no more Eo objects in C, thus + # we cannot use Eo.obj and _set_obj() anymore :( + # self._set_obj(ecore_idle_exiter_add(_ecore_task_cb, <void *>self)) + self.obj2 = ecore_idle_exiter_add(_ecore_task_cb, <void *>self) + Py_INCREF(self) def delete(self): """Stop callback emission and free internal resources.""" - ecore_idle_exiter_del(self.obj) + ecore_idle_exiter_del(self.obj2) + self.obj2 = NULL + Py_DECREF(self) def idler_add(func, *args, **kargs): diff --git a/include/efl.ecore.pxd b/include/efl.ecore.pxd index 3e0003e..c9cad96 100644 --- a/include/efl.ecore.pxd +++ b/include/efl.ecore.pxd @@ -109,9 +109,9 @@ cdef extern from "Ecore.h": ctypedef cEo Ecore_Timer ctypedef struct Ecore_Animator ctypedef cEo Ecore_Poller - ctypedef cEo Ecore_Idler - ctypedef cEo Ecore_Idle_Enterer - ctypedef cEo Ecore_Idle_Exiter + ctypedef struct Ecore_Idler + ctypedef struct Ecore_Idle_Enterer + ctypedef struct Ecore_Idle_Exiter ctypedef struct Ecore_Event_Handler ctypedef struct Ecore_Event @@ -321,6 +321,8 @@ cdef class Poller(Eo): cdef class Idler(Eo): cdef readonly object func, args, kargs cpdef bint _task_exec(self) except * + # we cannot use Eo.obj here because idlers are no more eo objects in C + cdef Ecore_Idler *obj2 cdef class IdleEnterer(Idler): --