aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside2/libpyside/pysidesignal.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2020-09-22 08:22:42 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2020-09-22 08:22:42 +0200
commit17a20f95151368a3b92b949b905325865643ca45 (patch)
tree2271f52498f0dfe7bac57888af7c56b85c3d9e02 /sources/pyside2/libpyside/pysidesignal.cpp
parent98eb59226aca550ae086c00b9c8023f47c44d2b2 (diff)
parent936cc4c72e2393ed59e05dca1100150d88b52645 (diff)
Merge remote-tracking branch 'origin/5.15' into dev
Diffstat (limited to 'sources/pyside2/libpyside/pysidesignal.cpp')
-rw-r--r--sources/pyside2/libpyside/pysidesignal.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/sources/pyside2/libpyside/pysidesignal.cpp b/sources/pyside2/libpyside/pysidesignal.cpp
index a834c841e..1a9e5e115 100644
--- a/sources/pyside2/libpyside/pysidesignal.cpp
+++ b/sources/pyside2/libpyside/pysidesignal.cpp
@@ -88,6 +88,7 @@ static void signalFree(void *);
static void signalInstanceFree(void *);
static PyObject *signalGetItem(PyObject *self, PyObject *key);
static PyObject *signalToString(PyObject *self);
+static PyObject *signalDescrGet(PyObject *self, PyObject *obj, PyObject *type);
// Signal Instance methods
static PyObject *signalInstanceConnect(PyObject *, PyObject *, PyObject *);
@@ -137,6 +138,7 @@ static PyTypeObject *PySideMetaSignalTypeF(void)
static PyType_Slot PySideSignalType_slots[] = {
{Py_mp_subscript, reinterpret_cast<void *>(signalGetItem)},
+ {Py_tp_descr_get, reinterpret_cast<void *>(signalDescrGet)},
{Py_tp_call, reinterpret_cast<void *>(signalCall)},
{Py_tp_str, reinterpret_cast<void *>(signalToString)},
{Py_tp_init, reinterpret_cast<void *>(signalTpInit)},
@@ -542,6 +544,19 @@ static PyObject *signalInstanceDisconnect(PyObject *self, PyObject *args)
return 0;
}
+// PYSIDE-68: Supply the missing __get__ function
+static PyObject *signalDescrGet(PyObject *self, PyObject *obj, PyObject * /*type*/)
+{
+ auto signal = reinterpret_cast<PySideSignal *>(self);
+ // Return the unbound signal if there is nothing to bind it to.
+ if (obj == nullptr || obj == Py_None) {
+ Py_INCREF(self);
+ return self;
+ }
+ Shiboken::AutoDecRef name(Py_BuildValue("s", signal->data->signalName.data()));
+ return reinterpret_cast<PyObject *>(PySide::Signal::initialize(signal, name, obj));
+}
+
static PyObject *signalCall(PyObject *self, PyObject *args, PyObject *kw)
{
auto signal = reinterpret_cast<PySideSignal *>(self);
@@ -755,11 +770,12 @@ static void instanceInitialize(PySideSignalInstance *self, PyObject *name, PySid
PySideSignalInstance *initialize(PySideSignal *self, PyObject *name, PyObject *object)
{
- PySideSignalInstance *instance = PyObject_New(PySideSignalInstance, PySideSignalInstanceTypeF());
+ PySideSignalInstance *instance = PyObject_New(PySideSignalInstance,
+ PySideSignalInstanceTypeF());
+ instanceInitialize(instance, name, self, object, 0);
auto sbkObj = reinterpret_cast<SbkObject *>(object);
if (!Shiboken::Object::wasCreatedByPython(sbkObj))
Py_INCREF(object); // PYSIDE-79: this flag was crucial for a wrapper call.
- instanceInitialize(instance, name, self, object, 0);
return instance;
}