davemds pushed a commit to branch master. http://git.enlightenment.org/bindings/python/python-efl.git/commit/?id=8f23c26d89025b6bf4fa4901cefc412e0a38770c
commit 8f23c26d89025b6bf4fa4901cefc412e0a38770c Author: Dave Andreoli <d...@gurumeditation.it> Date: Mon Aug 1 16:50:57 2016 +0200 Ecore.Animator is no more an Eo object in C :( #TheWhiteRabbitIsDead --- efl/ecore/efl.ecore.pyx | 5 +++-- efl/ecore/efl.ecore_animator.pxi | 37 ++++++++++++++++++++++++++++++------- include/efl.ecore.pxd | 4 +++- 3 files changed, 36 insertions(+), 10 deletions(-) diff --git a/efl/ecore/efl.ecore.pyx b/efl/ecore/efl.ecore.pyx index 7bb1c3f..e2245bb 100644 --- a/efl/ecore/efl.ecore.pyx +++ b/efl/ecore/efl.ecore.pyx @@ -255,8 +255,9 @@ import atexit cdef Eina_Bool _ecore_task_cb(void *data) with gil: - cdef Eo obj = <Eo>data - cdef Eina_Bool ret + cdef: + Eo obj = <Eo>data + Eina_Bool ret try: ret = obj._task_exec() diff --git a/efl/ecore/efl.ecore_animator.pxi b/efl/ecore/efl.ecore_animator.pxi index d80f767..c13b0ed 100644 --- a/efl/ecore/efl.ecore_animator.pxi +++ b/efl/ecore/efl.ecore_animator.pxi @@ -60,27 +60,44 @@ cdef class Animator(Eo): self.func = func self.args = args self.kargs = kargs - self._set_obj(ecore_animator_add(_ecore_task_cb, <void *>self)) + + # From efl 1.18 animators are no more Eo objects in C, thus + # we cannot use Eo.obj and _set_obj() anymore :( + # self._set_obj(ecore_animator_add(_ecore_task_cb, <void *>self)) + self.obj2 = ecore_animator_add(_ecore_task_cb, <void *>self) + Py_INCREF(self) def __str__(self): - return "%s Animator(func=%s, args=%s, kargs=%s)" % (Eo.__repr__(self), - self.func, self.args, self.kargs) + return "Animator(obj=%#x, func=%s, args=%s, kargs=%s)" % ( + <uintptr_t>self.obj2, self.func, self.args, self.kargs) def __repr__(self): - return "%s Animator(func=%s, args=%s, kargs=%s)" % (Eo.__repr__(self), - self.func, self.args, self.kargs) + return "Animator(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_animator_del(self.obj) + ecore_animator_del(self.obj2) + self.obj2 = NULL + Py_DECREF(self) def stop(self): """Alias for delete().""" self.delete() + cdef Eina_Bool _ecore_timeline_cb(void *data, double pos) with gil: assert data != NULL cdef: @@ -146,11 +163,17 @@ cdef class AnimatorTimeline(Animator): self.func = func self.args = args self.kargs = kargs - self._set_obj(ecore_animator_timeline_add(runtime, _ecore_timeline_cb, <void *>self)) + + # From efl 1.18 animators are no more Eo objects in C, thus + # we cannot use Eo.obj and _set_obj() anymore :( + # self._set_obj(ecore_animator_timeline_add(runtime, _ecore_timeline_cb, <void *>self)) + self.obj2 = ecore_animator_timeline_add(runtime, _ecore_timeline_cb, <void *>self) + Py_INCREF(self) cpdef bint _task_exec(self) except *: return self.func(*self.args, **self.kargs) + def animator_add(func, *args, **kargs): """Animator factory, for C-api compatibility. diff --git a/include/efl.ecore.pxd b/include/efl.ecore.pxd index bc3d385..3e0003e 100644 --- a/include/efl.ecore.pxd +++ b/include/efl.ecore.pxd @@ -107,7 +107,7 @@ cdef extern from "Ecore.h": # Basic Types # ctypedef cEo Ecore_Timer - ctypedef cEo Ecore_Animator + ctypedef struct Ecore_Animator ctypedef cEo Ecore_Poller ctypedef cEo Ecore_Idler ctypedef cEo Ecore_Idle_Enterer @@ -307,6 +307,8 @@ cdef class Animator(Eo): cdef readonly tuple args cdef readonly dict kargs cpdef bint _task_exec(self) except * + # we cannot use Eo.obj here because animators are no more eo objects in C + cdef Ecore_Animator *obj2 cdef class Poller(Eo): --