Merge remote branch 'origin/acid-burn/bug_670_plugin_restartoption' into experimental
[vuplus_dvbapp] / lib / python / connections.h
index d24bb42..b4cd1c7 100644 (file)
@@ -3,20 +3,19 @@
 
 #include <libsig_comp.h>
 
-               /* avoid warnigs :) */
-#include <features.h>
-#undef _POSIX_C_SOURCE
-#define _POSIX_C_SOURCE 200112L
-
 #include <lib/python/python.h>
 
 class PSignal
 {
+protected:
        ePyObject m_list;
 public:
        PSignal();
        ~PSignal();
        void callPython(SWIG_PYOBJECT(ePyObject) tuple);
+#ifndef SWIG
+       PyObject *getSteal(bool clear=false);
+#endif
        PyObject *get();
 };
 
@@ -36,9 +35,12 @@ class PSignal0: public PSignal, public Signal0<R>
 public:
        R operator()()
        {
-               PyObject *pArgs = PyTuple_New(0);
-               callPython(pArgs);
-               Org_Py_DECREF(pArgs);
+               if (m_list)
+               {
+                       PyObject *pArgs = PyTuple_New(0);
+                       callPython(pArgs);
+                       Org_Py_DECREF(pArgs);
+               }
                return Signal0<R>::operator()();
        }
 };
@@ -49,10 +51,13 @@ class PSignal1: public PSignal, public Signal1<R,V0>
 public:
        R operator()(V0 a0)
        {
-               PyObject *pArgs = PyTuple_New(1);
-               PyTuple_SET_ITEM(pArgs, 0, PyFrom(a0));
-               callPython(pArgs);
-               Org_Py_DECREF(pArgs);
+               if (m_list)
+               {
+                       PyObject *pArgs = PyTuple_New(1);
+                       PyTuple_SET_ITEM(pArgs, 0, PyFrom(a0));
+                       callPython(pArgs);
+                       Org_Py_DECREF(pArgs);
+               }
                return Signal1<R,V0>::operator()(a0);
        }
 };
@@ -63,11 +68,14 @@ class PSignal2: public PSignal, public Signal2<R,V0,V1>
 public:
        R operator()(V0 a0, V1 a1)
        {
-               PyObject *pArgs = PyTuple_New(2);
-               PyTuple_SET_ITEM(pArgs, 0, PyFrom(a0));
-               PyTuple_SET_ITEM(pArgs, 1, PyFrom(a1));
-               callPython(pArgs);
-               Org_Py_DECREF(pArgs);
+               if (m_list)
+               {
+                       PyObject *pArgs = PyTuple_New(2);
+                       PyTuple_SET_ITEM(pArgs, 0, PyFrom(a0));
+                       PyTuple_SET_ITEM(pArgs, 1, PyFrom(a1));
+                       callPython(pArgs);
+                       Org_Py_DECREF(pArgs);
+               }
                return Signal2<R,V0,V1>::operator()(a0, a1);
        }
 };