aboutsummaryrefslogtreecommitdiffstats
path: root/libpyside
diff options
context:
space:
mode:
authorrenatofilho <renato.filho@openbossa.org>2010-09-16 14:14:45 -0300
committerrenatofilho <renato.filho@openbossa.org>2010-09-16 17:12:34 -0300
commit551f6b9c7240d1f68e50edcec0fc41969beaef1d (patch)
tree3e6c2878b7b59f3aeb129a5581529ddf4627e760 /libpyside
parentc06110168c39e5c44b9b11ff13fd6f9795199df3 (diff)
Fixed connection cleanup function.
Reviewer: Hugo Parente Lima <hugo.pl@gmail.com> Luciano Wolf <luciano.wolf@openbossa.org>
Diffstat (limited to 'libpyside')
-rw-r--r--libpyside/dynamicqmetaobject.cpp8
-rw-r--r--libpyside/globalreceiver.cpp26
2 files changed, 17 insertions, 17 deletions
diff --git a/libpyside/dynamicqmetaobject.cpp b/libpyside/dynamicqmetaobject.cpp
index c2e7f04bb..b97ae0dc3 100644
--- a/libpyside/dynamicqmetaobject.cpp
+++ b/libpyside/dynamicqmetaobject.cpp
@@ -322,11 +322,10 @@ void DynamicQMetaObject::addSlot(const char* slot, const char* type)
//search for a empty space
MethodData blank;
i = qFind(m_slots.begin(), m_slots.end(), blank);
- if (i != m_slots.end()) {
+ if (i != m_slots.end())
*i = MethodData(slot, type);
- } else {
+ else
m_slots << MethodData(slot, type);
- }
updateMetaObject();
}
@@ -438,7 +437,6 @@ void DynamicQMetaObject::writeMethodsData(QLinkedList<MethodData>& methods,
if (iMethod != methods.end() && ((*iMethod).signature().size() > 0) ) {
(*data)[index++] = registerString((*iMethod).signature(), strings); // func name
mType = (*iMethod).type();
- iMethod++;
} else {
(*data)[index++] = null_index; // func name
}
@@ -446,6 +444,8 @@ void DynamicQMetaObject::writeMethodsData(QLinkedList<MethodData>& methods,
(*data)[index++] = (mType.size() > 0 ? registerString(mType, strings) : null_index); // normalized type
(*data)[index++] = null_index; // tags
(*data)[index++] = flags;
+ if (iMethod != methods.end())
+ iMethod++;
}
*prtIndex = index;
diff --git a/libpyside/globalreceiver.cpp b/libpyside/globalreceiver.cpp
index 2dd82aab4..2c126044e 100644
--- a/libpyside/globalreceiver.cpp
+++ b/libpyside/globalreceiver.cpp
@@ -107,7 +107,6 @@ DynamicSlotData::~DynamicSlotData()
Py_DECREF(m_callback);
}
-
GlobalReceiver::GlobalReceiver()
: m_metaObject(GLOBAL_RECEIVER_CLASS_NAME, &QObject::staticMetaObject)
{
@@ -126,20 +125,23 @@ GlobalReceiver::~GlobalReceiver()
void GlobalReceiver::connectNotify(QObject* source, int slotId)
{
if (m_slotReceivers.contains(slotId)) {
- m_slotReceivers[slotId]->addRef(source);
+ DynamicSlotData* data = m_slotReceivers[slotId];
+ if (!data->hasRefTo(source))
+ QObject::connect(source, SIGNAL(destroyed(QObject*)), this, "1"RECEIVER_DESTROYED_SLOT_NAME);
+ data->addRef(source);
}
}
void GlobalReceiver::disconnectNotify(QObject* source, int slotId)
{
- if (m_slotReceivers.contains(slotId)) {
- QObject::disconnect(source, SIGNAL(destroyed(QObject*)), this, "1"RECEIVER_DESTROYED_SLOT_NAME);
-
+ if (m_slotReceivers.contains(slotId)) {
DynamicSlotData *data = m_slotReceivers[slotId];
data->decRef(source);
- if (data->refCount() == 0) {
+ if (data->refCount() == 0)
removeSlot(slotId);
- }
+
+ if (!hasConnectionWith(source))
+ QObject::disconnect(source, SIGNAL(destroyed(QObject*)), this, "1"RECEIVER_DESTROYED_SLOT_NAME);
}
}
@@ -152,9 +154,8 @@ void GlobalReceiver::addSlot(const char* slot, PyObject* callback)
{
m_metaObject.addSlot(slot);
int slotId = m_metaObject.indexOfSlot(slot);
- if (!m_slotReceivers.contains(slotId)) {
+ if (!m_slotReceivers.contains(slotId))
m_slotReceivers[slotId] = new DynamicSlotData(slotId, callback);
- }
bool isShortCircuit = true;
for (int i = 0; slot[i]; ++i) {
@@ -167,6 +168,7 @@ void GlobalReceiver::addSlot(const char* slot, PyObject* callback)
if (isShortCircuit)
m_shortCircuitSlots << slotId;
+
Q_ASSERT(slotId >= QObject::staticMetaObject.methodCount());
}
@@ -236,12 +238,10 @@ int GlobalReceiver::qt_metacall(QMetaObject::Call call, int id, void** args)
retval = PyObject_CallObject(callback, preparedArgs);
}
- if (!retval) {
- qDebug() << "Error calling slot" << m_metaObject.method(id).signature();
+ if (!retval)
PyErr_Print();
- } else {
+ else
Py_DECREF(retval);
- }
return -1;
}