aboutsummaryrefslogtreecommitdiffstats
path: root/libpyside
diff options
context:
space:
mode:
authorHugo Parente Lima <hugo.lima@openbossa.org>2010-06-10 19:57:18 -0300
committerHugo Parente Lima <hugo.lima@openbossa.org>2010-06-10 20:18:59 -0300
commit1b6337d8b4a65988dfbeb0eed67bc6584b25fdee (patch)
treee6efde3e5d00d4530f321894e62801ab8eac72e8 /libpyside
parentd8a192b5e14e996992a98766cd39ca2028e6474e (diff)
Removed QVariant from PySide.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org> Marcelo Lira <marcelo.lira@openbossa.org>
Diffstat (limited to 'libpyside')
-rw-r--r--libpyside/pyside.cpp3
-rw-r--r--libpyside/signalmanager.cpp25
-rw-r--r--libpyside/signalmanager.h14
3 files changed, 24 insertions, 18 deletions
diff --git a/libpyside/pyside.cpp b/libpyside/pyside.cpp
index 3fa63a498..93271c8ba 100644
--- a/libpyside/pyside.cpp
+++ b/libpyside/pyside.cpp
@@ -34,6 +34,7 @@
#include "pyside.h"
+#include "signalmanager.h"
extern "C" void init_signal(PyObject* module);
extern "C" void init_slot(PyObject* module);
@@ -45,6 +46,8 @@ void init(PyObject *module)
{
init_signal(module);
init_slot(module);
+ // Init signal manager, so it will register some meta types used by QVariant.
+ SignalManager::instance();
}
} //namespace PySide
diff --git a/libpyside/signalmanager.cpp b/libpyside/signalmanager.cpp
index 80d7254b7..7ac3f3067 100644
--- a/libpyside/signalmanager.cpp
+++ b/libpyside/signalmanager.cpp
@@ -54,35 +54,22 @@
#define PYTHON_TYPE "PyObject"
-
-// Use this to wrap PyObject during the Signal/Slot handling
-struct PyObjectWrapper
-{
- PyObject* m_me;
- PyObjectWrapper(const PyObjectWrapper &other) : m_me(other.m_me) {}
- PyObjectWrapper(PyObject* me) : m_me(me) { Py_INCREF(m_me); }
- PyObjectWrapper() : m_me(Py_None) {}
- operator PyObject*() const { return m_me; }
-};
-
-Q_DECLARE_METATYPE(PyObjectWrapper)
-
namespace Shiboken {
template<>
-struct Converter<PyObjectWrapper>
+struct Converter<PySide::PyObjectWrapper>
{
- static PyObjectWrapper toCpp(PyObject* obj)
+ static PySide::PyObjectWrapper toCpp(PyObject* obj)
{
- return PyObjectWrapper(obj);
+ return PySide::PyObjectWrapper(obj);
}
static PyObject* toPython(void* obj)
{
- return toPython(*reinterpret_cast<PyObjectWrapper*>(obj));
+ return toPython(*reinterpret_cast<PySide::PyObjectWrapper*>(obj));
}
- static PyObject* toPython(const PyObjectWrapper& obj)
+ static PyObject* toPython(const PySide::PyObjectWrapper& obj)
{
return obj;
}
@@ -202,6 +189,8 @@ SignalManager::SignalManager() : m_d(new SignalManagerPrivate)
qRegisterMetaType<PyObjectWrapper>(PYTHON_TYPE);
TypeResolver::createValueTypeResolver<PyObjectWrapper>(PYTHON_TYPE);
+ TypeResolver::createValueTypeResolver<PyObjectWrapper>("object");
+ TypeResolver::createValueTypeResolver<PyObjectWrapper>("PySide::PyObjectWrapper");
}
void SignalManager::clear()
diff --git a/libpyside/signalmanager.h b/libpyside/signalmanager.h
index 233adf1ff..9687dcc3e 100644
--- a/libpyside/signalmanager.h
+++ b/libpyside/signalmanager.h
@@ -46,6 +46,17 @@ class QObject;
namespace PySide
{
+/// Thin wrapper for PyObject which increases the reference count at the constructor but *NOT* at destructor.
+class PYSIDE_API PyObjectWrapper
+{
+public:
+ PyObjectWrapper(PyObject* me) : m_me(me) { Py_INCREF(m_me); }
+ PyObjectWrapper() : m_me(Py_None) { Py_INCREF(m_me); }
+ operator PyObject*() const { return m_me; }
+private:
+ PyObject* m_me;
+};
+
PYSIDE_API bool isSignal(const char* signal);
PYSIDE_API bool checkSignal(const char* signal);
PYSIDE_API QString getCallbackSignature(const char* signal, PyObject* callback, bool encodeName);
@@ -84,4 +95,7 @@ private:
};
}
+
+Q_DECLARE_METATYPE(PySide::PyObjectWrapper)
+
#endif