aboutsummaryrefslogtreecommitdiffstats
path: root/PySide/QtCore
diff options
context:
space:
mode:
authorHugo Parente Lima <hugo.lima@openbossa.org>2010-05-21 15:48:45 -0300
committerHugo Parente Lima <hugo.lima@openbossa.org>2010-05-21 18:22:20 -0300
commite00da49c844ef1a8025abdb91c4c11416c0f1e98 (patch)
tree810c1b698037fe915bd1c06a064c68c58c14c07f /PySide/QtCore
parent46c628ec49b5948bffaf61e972618bd63adfb791 (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.h31
-rw-r--r--PySide/QtCore/typesystem_core.xml12
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&lt;PyObjectHolder>()) {
- %PYARG_0 = %CPPSELF.value&lt;PyObjectHolder>();
+ if (typeId == qMetaTypeId&lt;PyQt_PyObject>()) {
+ %PYARG_0 = %CPPSELF.value&lt;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&lt;PyObjectHolder>()) {
+ } else if (%CPPSELF.userType() == qMetaTypeId&lt;PyQt_PyObject>()) {
// emulate PyQt4 behaviour
- PyObject* obj = %CPPSELF.value&lt;PyObjectHolder>();
+ PyObject* obj = %CPPSELF.value&lt;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&lt;PyObjectHolder>()) {
- PyObject* val = %CPPSELF.value&lt;PyObjectHolder>();
+ if (%CPPSELF.userType() == qMetaTypeId&lt;PyQt_PyObject>()) {
+ PyObject* val = %CPPSELF.value&lt;PyQt_PyObject>();
if (PySequence_Check(val)) {
%PYARG_0 = val;
Py_INCREF(val);