From 40d67b2892039fabc41bf7a23c0ee7f95310367f Mon Sep 17 00:00:00 2001 From: Renato Filho Date: Mon, 17 May 2010 19:11:56 -0300 Subject: Implemented signal to signal connection. Reviewer: Hugo Parente Lima , Luciano Wolf --- libpyside/qsignal.cpp | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) (limited to 'libpyside') diff --git a/libpyside/qsignal.cpp b/libpyside/qsignal.cpp index 7cfa9f99d..0d24bec40 100644 --- a/libpyside/qsignal.cpp +++ b/libpyside/qsignal.cpp @@ -361,18 +361,26 @@ PyObject* signal_instance_connect(PyObject* self, PyObject* args, PyObject* kwds bool match = false; if (slot->ob_type == &SignalInstance_Type) { - //TODO: find best match - SignalInstanceData *target = reinterpret_cast(slot); - - if (QMetaObject::checkConnectArgs(source->signature, target->signature)) { - PyList_Append(pyArgs, source->source); - Shiboken::AutoDecRef source_signature(PyString_FromString(source->signature)); - PyList_Append(pyArgs, source_signature); - - PyList_Append(pyArgs, target->source); - Shiboken::AutoDecRef target_signature(PyString_FromString(target->signature)); - PyList_Append(pyArgs, target_signature); - match = true; + SignalInstanceData *sourceWalk = source; + SignalInstanceData *targetWalk; + + //find best match + while(sourceWalk && !match) { + targetWalk = reinterpret_cast(slot); + while(targetWalk && !match) { + if (QMetaObject::checkConnectArgs(sourceWalk->signature, targetWalk->signature)) { + PyList_Append(pyArgs, sourceWalk->source); + Shiboken::AutoDecRef sourceSignature(PyString_FromString(sourceWalk->signature)); + PyList_Append(pyArgs, sourceSignature); + + PyList_Append(pyArgs, targetWalk->source); + Shiboken::AutoDecRef targetSignature(PyString_FromString(targetWalk->signature)); + PyList_Append(pyArgs, targetSignature); + match = true; + } + targetWalk = reinterpret_cast(targetWalk->next); + } + sourceWalk = reinterpret_cast(sourceWalk->next); } } else { //try the first signature -- cgit v1.2.3