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):

-- 


Reply via email to