diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2024-01-15 17:14:35 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2024-01-16 13:08:58 +0100 |
commit | d7aa15abe25bd71ea19180743ce9b41e0b788520 (patch) | |
tree | 4686c744ed1bd0b868654ccb1893bc5d1dc9636c /sources/pyside6/libpyside/pysidesignal.cpp | |
parent | 07397e4fde36d0db61bf22ec87097b1079397811 (diff) |
PySide6: Change QObject.disconnect() to return False with warning on failure
[ChangeLog][PySide6] QObject.disconnect() now returns False instead
of raising an exception for non-fatal cases.
Fixes: PYSIDE-1275
Change-Id: I860b69e1a7055c38f903ffafd7f816575c0d1f7a
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'sources/pyside6/libpyside/pysidesignal.cpp')
-rw-r--r-- | sources/pyside6/libpyside/pysidesignal.cpp | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/sources/pyside6/libpyside/pysidesignal.cpp b/sources/pyside6/libpyside/pysidesignal.cpp index 150dd500e..ecfb92d15 100644 --- a/sources/pyside6/libpyside/pysidesignal.cpp +++ b/sources/pyside6/libpyside/pysidesignal.cpp @@ -661,6 +661,12 @@ static PyObject *signalInstanceGetItem(PyObject *self, PyObject *key) return nullptr; } +static inline void warnDisconnectFailed(PyObject *aSlot, const QByteArray &signature) +{ + PyErr_WarnFormat(PyExc_RuntimeError, 0, "Failed to disconnect (%S) from signal \"%s\".", + aSlot, signature.constData()); +} + static PyObject *signalInstanceDisconnect(PyObject *self, PyObject *args) { auto source = reinterpret_cast<PySideSignalInstance *>(self); @@ -708,14 +714,14 @@ static PyObject *signalInstanceDisconnect(PyObject *self, PyObject *args) Shiboken::AutoDecRef pyMethod(PyObject_GetAttr(source->d->source, PySide::PySideName::qtDisconnect())); PyObject *result = PyObject_CallObject(pyMethod, tupleArgs); - if (!result || result == Py_True) - return result; - Py_DECREF(result); + if (result != Py_True) + warnDisconnectFailed(slot, source->d->signature); + return result; } - PyErr_Format(PyExc_RuntimeError, "Failed to disconnect (%S) from signal \"%s\".", - slot, source->d->signature.constData()); - return nullptr; + warnDisconnectFailed(slot, source->d->signature); + Py_INCREF(Py_False); + return Py_False; } // PYSIDE-68: Supply the missing __get__ function @@ -853,7 +859,7 @@ static const char *SignalInstance_SignatureStrings[] = { "PySide6.QtCore.SignalInstance.connect(self,slot:object," "type:PySide6.QtCore.Qt.ConnectionType=PySide6.QtCore.Qt.ConnectionType.AutoConnection)" "->PySide6.QtCore.QMetaObject.Connection", - "PySide6.QtCore.SignalInstance.disconnect(self,slot:object=nullptr)", + "PySide6.QtCore.SignalInstance.disconnect(self,slot:object=nullptr)->bool", "PySide6.QtCore.SignalInstance.emit(self,*args:typing.Any)", nullptr}; // Sentinel |