Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2024-01-15 17:14:35 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2024-01-16 13:08:58 +0100
commitd7aa15abe25bd71ea19180743ce9b41e0b788520 (patch)
tree4686c744ed1bd0b868654ccb1893bc5d1dc9636c /sources/pyside6/libpyside/pysidesignal.cpp
parent07397e4fde36d0db61bf22ec87097b1079397811 (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.cpp20
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