aboutsummaryrefslogtreecommitdiffstats
path: root/libpyside
diff options
context:
space:
mode:
authorRenato Filho <renato.filho@openbossa.org>2010-05-17 19:11:56 -0300
committerRenato Filho <renato.filho@openbossa.org>2010-05-17 19:55:14 -0300
commit40d67b2892039fabc41bf7a23c0ee7f95310367f (patch)
treef10e3747323c53af85658e1b0fbf586692461813 /libpyside
parent3f6c11762e55942f530737b6ed6528680fb675b5 (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.cpp32
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