Deduplicate code in TQObject::activate_signal()

Signed-off-by: Alexander Golubev <fatzer2@gmail.com>
feat/naive-dedup
Alexander Golubev 2 months ago
parent cbdf333378
commit 75efd1af6b

@ -2789,12 +2789,17 @@ void TQObject::activate_signal( TQConnectionList *clist, TQUObject *o )
TQSenderObjectList* sol;
TQObject* oldSender = 0;
TQConnection *c;
if ( clist->count() == 1 ) { // save iterator
c = clist->first();
TQConnection *cd = 0;
TQConnectionListIt it(*clist);
while ( (c=it.current()) ) {
++it;
if ( c == cd )
continue;
cd = c;
object = c->object();
sol = object->senderObjects;
#ifdef TQT_THREAD_SUPPORT
sol->listMutex->lock();
sol->listMutex->lock();
#endif // TQT_THREAD_SUPPORT
if ( sol ) {
oldSender = sol->currentSender;
@ -2802,13 +2807,11 @@ void TQObject::activate_signal( TQConnectionList *clist, TQUObject *o )
sol->currentSender = this;
}
if ( c->memberType() == TQ_SIGNAL_CODE ) {
#if !defined(TQT_THREAD_SUPPORT)
object->tqt_emit( c->member(), o );
#else // defined(TQT_THREAD_SUPPORT)
if ((d->disableThreadPostedEvents) ||
(object->d->disableThreadPostedEvents) ||
(currentThread && currentThread->threadPostedEventsDisabled()) ||
(currentThread && object->d->ownThread == currentThread)) {
#ifdef TQT_THREAD_SUPPORT
if ((d->disableThreadPostedEvents) ||
(object->d->disableThreadPostedEvents) ||
(currentThread && currentThread->threadPostedEventsDisabled()) ||
(currentThread && object->d->ownThread == currentThread)) {
sol->listMutex->unlock();
object->tqt_emit( c->member(), o );
sol->listMutex->lock();
@ -2816,21 +2819,21 @@ void TQObject::activate_signal( TQConnectionList *clist, TQUObject *o )
else {
if (object->d->ownThread && !object->d->ownThread->finished()) {
#ifdef QT_DEBUG
tqDebug("TQObject::activate_signal: Emitting cross-thread signal from object %p (member %d receiver %p) (1)\n", this, c->member(), object);
tqDebug("TQObject::activate_signal: Emitting cross-thread signal from object %p (member %d receiver %p)\n", this, c->member(), object);
#endif // QT_DEBUG
TQApplication::postEvent(object, new TQMetaCallEvent(c->member(), this, deepCopyTQUObjectArray(o), TQMetaCallEvent::MetaCallEmit));
}
}
#endif // !defined(TQT_THREAD_SUPPORT)
#else // !TQT_THREAD_SUPPORT
object->tqt_emit( c->member(), o );
#endif // TQT_THREAD_SUPPORT
}
else {
#if !defined(TQT_THREAD_SUPPORT)
object->tqt_invoke( c->member(), o );
#else // defined(TQT_THREAD_SUPPORT)
if ((d->disableThreadPostedEvents) ||
(object->d->disableThreadPostedEvents) ||
(currentThread && currentThread->threadPostedEventsDisabled()) ||
(currentThread && object->d->ownThread == currentThread)) {
#ifdef TQT_THREAD_SUPPORT
if ((d->disableThreadPostedEvents) ||
(object->d->disableThreadPostedEvents) ||
(currentThread && currentThread->threadPostedEventsDisabled()) ||
(currentThread && object->d->ownThread == currentThread)) {
sol->listMutex->unlock();
object->tqt_invoke( c->member(), o );
sol->listMutex->lock();
@ -2838,18 +2841,20 @@ void TQObject::activate_signal( TQConnectionList *clist, TQUObject *o )
else {
if (object->d->ownThread && !object->d->ownThread->finished()) {
#ifdef QT_DEBUG
tqDebug("TQObject::activate_signal: Invoking cross-thread method from object %p (member %d receiver %p) (1)\n", this, c->member(), object);
tqDebug("TQObject::activate_signal: Invoking cross-thread method from object %p (member %d receiver %p)\n", this, c->member(), object);
#endif // QT_DEBUG
TQApplication::postEvent(object, new TQMetaCallEvent(c->member(), this, deepCopyTQUObjectArray(o), TQMetaCallEvent::MetaCallInvoke));
}
}
#endif // !defined(TQT_THREAD_SUPPORT)
#else // !TQT_THREAD_SUPPORT
object->tqt_invoke( c->member(), o );
#endif // TQT_THREAD_SUPPORT
}
if ( sol ) {
if (sol ) {
sol->currentSender = oldSender;
if ( sol->deref() ) {
#ifdef TQT_THREAD_SUPPORT
sol->listMutex->unlock();
sol->listMutex->unlock();
#endif // TQT_THREAD_SUPPORT
delete sol;
sol = NULL;
@ -2858,82 +2863,6 @@ void TQObject::activate_signal( TQConnectionList *clist, TQUObject *o )
#ifdef TQT_THREAD_SUPPORT
if (sol) sol->listMutex->unlock();
#endif // TQT_THREAD_SUPPORT
} else {
TQConnection *cd = 0;
TQConnectionListIt it(*clist);
while ( (c=it.current()) ) {
++it;
if ( c == cd )
continue;
cd = c;
object = c->object();
sol = object->senderObjects;
#ifdef TQT_THREAD_SUPPORT
sol->listMutex->lock();
#endif // TQT_THREAD_SUPPORT
if ( sol ) {
oldSender = sol->currentSender;
sol->ref();
sol->currentSender = this;
}
if ( c->memberType() == TQ_SIGNAL_CODE ) {
#if !defined(TQT_THREAD_SUPPORT)
object->tqt_emit( c->member(), o );
#else // defined(TQT_THREAD_SUPPORT)
if ((d->disableThreadPostedEvents) ||
(object->d->disableThreadPostedEvents) ||
(currentThread && currentThread->threadPostedEventsDisabled()) ||
(currentThread && object->d->ownThread == currentThread)) {
sol->listMutex->unlock();
object->tqt_emit( c->member(), o );
sol->listMutex->lock();
}
else {
if (object->d->ownThread && !object->d->ownThread->finished()) {
#ifdef QT_DEBUG
tqDebug("TQObject::activate_signal: Emitting cross-thread signal from object %p (member %d receiver %p) (2)\n", this, c->member(), object);
#endif // QT_DEBUG
TQApplication::postEvent(object, new TQMetaCallEvent(c->member(), this, deepCopyTQUObjectArray(o), TQMetaCallEvent::MetaCallEmit));
}
}
#endif // !defined(TQT_THREAD_SUPPORT)
}
else {
#if !defined(TQT_THREAD_SUPPORT)
object->tqt_invoke( c->member(), o );
#else // defined(TQT_THREAD_SUPPORT)
if ((d->disableThreadPostedEvents) ||
(object->d->disableThreadPostedEvents) ||
(currentThread && currentThread->threadPostedEventsDisabled()) ||
(currentThread && object->d->ownThread == currentThread)) {
sol->listMutex->unlock();
object->tqt_invoke( c->member(), o );
sol->listMutex->lock();
}
else {
if (object->d->ownThread && !object->d->ownThread->finished()) {
#ifdef QT_DEBUG
tqDebug("TQObject::activate_signal: Invoking cross-thread method from object %p (member %d receiver %p) (2)\n", this, c->member(), object);
#endif // QT_DEBUG
TQApplication::postEvent(object, new TQMetaCallEvent(c->member(), this, deepCopyTQUObjectArray(o), TQMetaCallEvent::MetaCallInvoke));
}
}
#endif // !defined(TQT_THREAD_SUPPORT)
}
if (sol ) {
sol->currentSender = oldSender;
if ( sol->deref() ) {
#ifdef TQT_THREAD_SUPPORT
sol->listMutex->unlock();
#endif // TQT_THREAD_SUPPORT
delete sol;
sol = NULL;
}
}
#ifdef TQT_THREAD_SUPPORT
if (sol) sol->listMutex->unlock();
#endif // TQT_THREAD_SUPPORT
}
}
}

Loading…
Cancel
Save