diff options
author | Renato Filho <renato.filho@openbossa.org> | 2010-05-17 19:11:56 -0300 |
---|---|---|
committer | Renato Filho <renato.filho@openbossa.org> | 2010-05-17 19:55:14 -0300 |
commit | 40d67b2892039fabc41bf7a23c0ee7f95310367f (patch) | |
tree | f10e3747323c53af85658e1b0fbf586692461813 /libpyside | |
parent | 3f6c11762e55942f530737b6ed6528680fb675b5 (diff) |
Implemented signal to signal connection.
Reviewer: Hugo Parente Lima <hugo.lima@openbossa.org>,
Luciano Wolf <luciano.wolf@openbossa.org>
Diffstat (limited to 'libpyside')
-rw-r--r-- | libpyside/qsignal.cpp | 32 |
1 files changed, 20 insertions, 12 deletions
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<SignalInstanceData*>(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<SignalInstanceData*>(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<SignalInstanceData*>(targetWalk->next); + } + sourceWalk = reinterpret_cast<SignalInstanceData*>(sourceWalk->next); } } else { //try the first signature |