diff options
author | Hugo Parente Lima <hugo.lima@openbossa.org> | 2010-05-21 15:48:45 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.lima@openbossa.org> | 2010-05-21 18:22:20 -0300 |
commit | e00da49c844ef1a8025abdb91c4c11416c0f1e98 (patch) | |
tree | 810c1b698037fe915bd1c06a064c68c58c14c07f /PySide/QtCore | |
parent | 46c628ec49b5948bffaf61e972618bd63adfb791 (diff) |
Fix QVariant custom code to work with Qt4.7.
Instead of expand QDECLARE_METATYPE just to change a string, change the class name used to hold
the PyObject and use the Qt macro. This will protect us on future changes on this macro like the
one on Qt 4.7.
Reviewer: Renato Araújo <renato.filho@openbossa.org>
Luciano Wolf <luciano.wolf@openbossa.org>
Diffstat (limited to 'PySide/QtCore')
-rw-r--r-- | PySide/QtCore/qvariant_conversions.h | 31 | ||||
-rw-r--r-- | PySide/QtCore/typesystem_core.xml | 12 |
2 files changed, 12 insertions, 31 deletions
diff --git a/PySide/QtCore/qvariant_conversions.h b/PySide/QtCore/qvariant_conversions.h index cd2ab8da0..f0f78a077 100644 --- a/PySide/QtCore/qvariant_conversions.h +++ b/PySide/QtCore/qvariant_conversions.h @@ -1,33 +1,14 @@ // We use this thin wrapper instead of the plain PyObject pointer to avoid conflicts with specializations of T* // in QVariant. -struct PyObjectHolder +struct PyQt_PyObject { PyObject* m_me; - PyObjectHolder(PyObject* me) : m_me(me) {} - PyObjectHolder() : m_me(Py_None) {} + PyQt_PyObject(PyObject* me) : m_me(me) {} + PyQt_PyObject() : m_me(Py_None) {} operator PyObject*() { return m_me; } }; -/** - * Q_DECLARE_METATYPE(PyObjectHolder); - * Use the expanded version of Q_DECLARE_METATYPE macro to define a typename - * compatible with PyQt4 - **/ -QT_BEGIN_NAMESPACE -template <> -struct QMetaTypeId< PyObjectHolder > -{ - enum { Defined = 1 }; - static int qt_metatype_id() - { - static QBasicAtomicInt metatype_id = Q_BASIC_ATOMIC_INITIALIZER(0); - if (!metatype_id) - metatype_id = - qRegisterMetaType<PyObjectHolder>("PyQt_PyObject"); - return metatype_id; - } -}; -QT_END_NAMESPACE +Q_DECLARE_METATYPE(PyQt_PyObject) namespace Shiboken { @@ -64,7 +45,7 @@ inline QVariant Converter<QVariant>::toCpp(PyObject* pyObj) } else if (!Shiboken::isShibokenType(pyObj) || Shiboken::isUserType(pyObj)) { // QVariant(User class) Py_INCREF(pyObj); - return QVariant::fromValue<PyObjectHolder>(pyObj); + return QVariant::fromValue<PyQt_PyObject>(pyObj); } else { // a class supported by QVariant? const char* typeName = pyObj->ob_type->tp_name; @@ -88,7 +69,7 @@ inline QVariant Converter<QVariant>::toCpp(PyObject* pyObj) } // Is a shiboken type not known by Qt Py_INCREF(pyObj); - return QVariant::fromValue<PyObjectHolder>(pyObj); + return QVariant::fromValue<PyQt_PyObject>(pyObj); } } diff --git a/PySide/QtCore/typesystem_core.xml b/PySide/QtCore/typesystem_core.xml index 186be106a..e64006c0e 100644 --- a/PySide/QtCore/typesystem_core.xml +++ b/PySide/QtCore/typesystem_core.xml @@ -1519,8 +1519,8 @@ <add-function signature="toPyObject()" return-type="PyObject*"> <inject-code class="target" position="beginning"> uint typeId = %CPPSELF.userType(); - if (typeId == qMetaTypeId<PyObjectHolder>()) { - %PYARG_0 = %CPPSELF.value<PyObjectHolder>(); + if (typeId == qMetaTypeId<PyQt_PyObject>()) { + %PYARG_0 = %CPPSELF.value<PyQt_PyObject>(); } else if (typeId == QVariant::String) { %PYARG_0 = %CONVERTTOPYTHON[QString](%CPPSELF.toString()); } else { @@ -1534,9 +1534,9 @@ if (%CPPSELF.isNull()) { %PYARG_0 = Py_None; Py_INCREF(Py_None); - } else if (%CPPSELF.userType() == qMetaTypeId<PyObjectHolder>()) { + } else if (%CPPSELF.userType() == qMetaTypeId<PyQt_PyObject>()) { // emulate PyQt4 behaviour - PyObject* obj = %CPPSELF.value<PyObjectHolder>(); + PyObject* obj = %CPPSELF.value<PyQt_PyObject>(); if (PySequence_Check(obj)) %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE]("QVariantList"); } @@ -1546,8 +1546,8 @@ </modify-function> <modify-function signature="toList()const"> <inject-code class="target" position="beginning"> - if (%CPPSELF.userType() == qMetaTypeId<PyObjectHolder>()) { - PyObject* val = %CPPSELF.value<PyObjectHolder>(); + if (%CPPSELF.userType() == qMetaTypeId<PyQt_PyObject>()) { + PyObject* val = %CPPSELF.value<PyQt_PyObject>(); if (PySequence_Check(val)) { %PYARG_0 = val; Py_INCREF(val); |