|
|
|
@ -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
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|