diff options
Diffstat (limited to 'libpyside')
-rw-r--r-- | libpyside/dynamicqmetaobject.cpp | 8 | ||||
-rw-r--r-- | libpyside/globalreceiver.cpp | 26 |
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; } |