aboutsummaryrefslogtreecommitdiffstats
path: root/libpyside
diff options
context:
space:
mode:
authorHugo Parente Lima <hugo.pl@gmail.com>2011-02-01 19:15:23 -0200
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-08 16:53:51 -0300
commit82e9d146016da82c8fab15aacb05e627b5cc5281 (patch)
treeed3dd05afab1f8733b039b8a5d9d95360a16591f /libpyside
parent4551b2421c47d2bba261b2202b019e6cc8a4af28 (diff)
Fix bug 651 - "Calling disconnect() with no arguments causes segfault"
Diffstat (limited to 'libpyside')
-rw-r--r--libpyside/pysidesignal.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/libpyside/pysidesignal.cpp b/libpyside/pysidesignal.cpp
index 71a8c00bc..7a2c8ae29 100644
--- a/libpyside/pysidesignal.cpp
+++ b/libpyside/pysidesignal.cpp
@@ -379,14 +379,14 @@ PyObject* signalInstanceGetItem(PyObject* self, PyObject* key)
PyObject* signalInstanceDisconnect(PyObject* self, PyObject* args)
{
- PySideSignalInstance *source = reinterpret_cast<PySideSignalInstance*>(self);
+ PySideSignalInstance* source = reinterpret_cast<PySideSignalInstance*>(self);
Shiboken::AutoDecRef pyArgs(PyList_New(0));
- PyObject *slot;
- if PyTuple_Check(args)
+ PyObject* slot;
+ if (PyTuple_Check(args) && PyTuple_GET_SIZE(args))
slot = PyTuple_GET_ITEM(args, 0);
else
- slot = args;
+ slot = Py_None;
bool match = false;
if (slot->ob_type == &PySideSignalInstanceType) {
@@ -407,6 +407,9 @@ PyObject* signalInstanceDisconnect(PyObject* self, PyObject* args)
Shiboken::AutoDecRef signature(PySide::Signal::buildQtCompatible(source->d->signature));
PyList_Append(pyArgs, signature);
+ // disconnect all, so we need to use the c++ signature disconnect(qobj, signal, 0, 0)
+ if (slot == Py_None)
+ PyList_Append(pyArgs, slot);
PyList_Append(pyArgs, slot);
match = true;
}
@@ -414,7 +417,7 @@ PyObject* signalInstanceDisconnect(PyObject* self, PyObject* args)
if (match) {
Shiboken::AutoDecRef tupleArgs(PyList_AsTuple(pyArgs));
Shiboken::AutoDecRef pyMethod(PyObject_GetAttrString(source->d->source, "disconnect"));
- return PyObject_CallObject(pyMethod, tupleArgs);
+ return PyObject_CallObject(pyMethod, tupleArgs);
}
return 0;