diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-09-04 16:11:09 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-09-04 16:11:09 +0200 |
commit | 704d3aab0f25d6b0d2939f1bb4e95ca73861ca9c (patch) | |
tree | 69680c1ce0a1a296aa1ed78fdbff30f583172e67 /sources/pyside2/libpyside | |
parent | d6d31c5c277d30080a6b92de3774460048dcf49e (diff) | |
parent | fedc289138bd912384e71a91e49ef9ee7b8a0fbb (diff) |
Merge remote-tracking branch 'origin/5.15' into dev
Change-Id: Ib1d2c1b76a043526e8f715e45296104cad085a4a
Diffstat (limited to 'sources/pyside2/libpyside')
-rw-r--r-- | sources/pyside2/libpyside/dynamicqmetaobject.cpp | 3 | ||||
-rw-r--r-- | sources/pyside2/libpyside/pysideslot.cpp | 16 |
2 files changed, 12 insertions, 7 deletions
diff --git a/sources/pyside2/libpyside/dynamicqmetaobject.cpp b/sources/pyside2/libpyside/dynamicqmetaobject.cpp index efdf33ac9..2fbda3f6a 100644 --- a/sources/pyside2/libpyside/dynamicqmetaobject.cpp +++ b/sources/pyside2/libpyside/dynamicqmetaobject.cpp @@ -533,7 +533,8 @@ void MetaObjectBuilderPrivate::parsePythonType(PyTypeObject *type) const int index = m_baseObject->indexOfProperty(String::toCString(key)); if (index == -1) addProperty(String::toCString(key), value); - } else if (PyFunction_Check(value)) { + } else if (Py_TYPE(value)->tp_call != nullptr) { + // PYSIDE-198: PyFunction_Check does not work with Nuitka. // Register slots. if (PyObject_HasAttr(value, slotAttrName)) { PyObject *signatureList = PyObject_GetAttr(value, slotAttrName); diff --git a/sources/pyside2/libpyside/pysideslot.cpp b/sources/pyside2/libpyside/pysideslot.cpp index e60115450..7bfd1719a 100644 --- a/sources/pyside2/libpyside/pysideslot.cpp +++ b/sources/pyside2/libpyside/pysideslot.cpp @@ -47,6 +47,8 @@ #include <QtCore/QString> #include <signature.h> +using namespace Shiboken; + struct SlotData { QByteArray name; @@ -136,23 +138,25 @@ PyObject *slotCall(PyObject *self, PyObject *args, PyObject * /* kw */) callback = PyTuple_GetItem(args, 0); Py_INCREF(callback); - if (PyFunction_Check(callback)) { + if (Py_TYPE(callback)->tp_call != nullptr) { PySideSlot *data = reinterpret_cast<PySideSlot *>(self); if (!data->slotData) data->slotData = new SlotData; - if (data->slotData->name.isEmpty()) - data->slotData->name = Shiboken::String::toCString(PepFunction_GetName(callback)); - + if (data->slotData->name.isEmpty()) { + // PYSIDE-198: Use PyObject_GetAttr instead of PepFunction_GetName to support Nuitka. + AutoDecRef funcName(PyObject_GetAttr(callback, PyMagicName::name())); + data->slotData->name = String::toCString(funcName); + } const QByteArray returnType = QMetaObject::normalizedType(data->slotData->resultType); const QByteArray signature = returnType + ' ' + data->slotData->name + '(' + data->slotData->args + ')'; if (!pySlotName) - pySlotName = Shiboken::String::fromCString(PYSIDE_SLOT_LIST_ATTR); + pySlotName = String::fromCString(PYSIDE_SLOT_LIST_ATTR); - PyObject *pySignature = Shiboken::String::fromCString(signature); + PyObject *pySignature = String::fromCString(signature); PyObject *signatureList = 0; if (PyObject_HasAttr(callback, pySlotName)) { signatureList = PyObject_GetAttr(callback, pySlotName); |