diff options
author | Hugo Parente Lima <hugo.lima@openbossa.org> | 2010-06-10 19:57:18 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.lima@openbossa.org> | 2010-06-10 20:18:59 -0300 |
commit | 1b6337d8b4a65988dfbeb0eed67bc6584b25fdee (patch) | |
tree | e6efde3e5d00d4530f321894e62801ab8eac72e8 /libpyside | |
parent | d8a192b5e14e996992a98766cd39ca2028e6474e (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.cpp | 3 | ||||
-rw-r--r-- | libpyside/signalmanager.cpp | 25 | ||||
-rw-r--r-- | libpyside/signalmanager.h | 14 |
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 |