From 2584dba8aabfa2db8297dcfa258d33545ed6af43 Mon Sep 17 00:00:00 2001 From: Michele Calgaro Date: Mon, 16 Jun 2025 18:37:59 +0900 Subject: Fix handling of socket notifier events in gmainloop functions. This resolves issue #231. Signed-off-by: Michele Calgaro --- src/kernel/tqeventloop_x11_glib.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'src/kernel/tqeventloop_x11_glib.cpp') diff --git a/src/kernel/tqeventloop_x11_glib.cpp b/src/kernel/tqeventloop_x11_glib.cpp index 9d18d1073..ba638aac9 100644 --- a/src/kernel/tqeventloop_x11_glib.cpp +++ b/src/kernel/tqeventloop_x11_glib.cpp @@ -419,8 +419,10 @@ bool TQEventLoop::gsourcePrepare(GSource *gs, int * timeout) } } - // include or exclude SocketNotifiers (by setting or cleaning poll events) - if ( ! ( flags & ExcludeSocketNotifiers ) ) { + // Include or exclude SocketNotifiers (by setting or cleaning poll events) + // Socket notifier events are only activated in the core application event loop, + // so filter them out in other event loops. + if (!(flags & ExcludeSocketNotifiers) && TQApplication::isGuiThread()) { TQPtrListIterator it( d->sn_list ); TQSockNotGPollFD *sn; while ( (sn=it.current()) ) { @@ -491,17 +493,20 @@ bool TQEventLoop::gsourceCheck(GSource *gs) { printf("inside gsourceCheck(1)\n"); #endif + ProcessEventsFlags flags = d->pev_flags; + // Socketnotifier events? - TQPtrList *list = &d->sn_list; - //if ( list ) { - TQSockNotGPollFD *sn = list->first(); - while ( sn ) { + if (!(flags & ExcludeSocketNotifiers) && TQApplication::isGuiThread()) + { + TQPtrListIterator it( d->sn_list ); + TQSockNotGPollFD *sn; + while ( (sn=it.current()) ) { + ++it; if ( sn->gPollFD.revents ) { return TRUE; } - sn = list->next(); } - //} + } if (d->x_gPollFD.revents) { #ifdef DEBUG_QT_GLIBMAINLOOP -- cgit v1.2.3