diff options
author | Hugo Parente Lima <hugo.pl@gmail.com> | 2011-02-01 19:15:23 -0200 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:53:51 -0300 |
commit | 82e9d146016da82c8fab15aacb05e627b5cc5281 (patch) | |
tree | ed3dd05afab1f8733b039b8a5d9d95360a16591f /libpyside/pysidesignal.cpp | |
parent | 4551b2421c47d2bba261b2202b019e6cc8a4af28 (diff) |
Fix bug 651 - "Calling disconnect() with no arguments causes segfault"
Diffstat (limited to 'libpyside/pysidesignal.cpp')
-rw-r--r-- | libpyside/pysidesignal.cpp | 13 |
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; |