|
|
|
@ -96,6 +96,9 @@ static gboolean qt_gsource_check ( GSource *source )
|
|
|
|
|
static gboolean qt_gsource_dispatch ( GSource *source,
|
|
|
|
|
GSourceFunc callback, gpointer user_data )
|
|
|
|
|
{
|
|
|
|
|
Q_UNUSED(callback);
|
|
|
|
|
Q_UNUSED(user_data);
|
|
|
|
|
|
|
|
|
|
TQtGSource * qtGSource = (TQtGSource*) source;
|
|
|
|
|
return qtGSource->qeventLoop->gsourceDispatch(source);
|
|
|
|
|
}
|
|
|
|
@ -166,7 +169,9 @@ void TQEventLoop::init()
|
|
|
|
|
d->pev_flags = AllEvents | WaitForMore;
|
|
|
|
|
|
|
|
|
|
// initialize the common parts of the event loop
|
|
|
|
|
pipe( d->thread_pipe );
|
|
|
|
|
if (pipe( d->thread_pipe ) < 0) {
|
|
|
|
|
// Error!
|
|
|
|
|
}
|
|
|
|
|
fcntl(d->thread_pipe[0], F_SETFD, FD_CLOEXEC);
|
|
|
|
|
fcntl(d->thread_pipe[1], F_SETFD, FD_CLOEXEC);
|
|
|
|
|
|
|
|
|
@ -341,7 +346,8 @@ bool TQEventLoop::processX11Events()
|
|
|
|
|
|
|
|
|
|
bool TQEventLoop::gsourcePrepare(GSource *gs, int * timeout)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
Q_UNUSED(gs);
|
|
|
|
|
|
|
|
|
|
#ifdef DEBUG_QT_GLIBMAINLOOP
|
|
|
|
|
printf("inside gsourcePrepare(1)\n");
|
|
|
|
|
#endif
|
|
|
|
@ -447,78 +453,80 @@ bool TQEventLoop::gsourcePrepare(GSource *gs, int * timeout)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool TQEventLoop::gsourceCheck(GSource *gs) {
|
|
|
|
|
|
|
|
|
|
Q_UNUSED(gs);
|
|
|
|
|
|
|
|
|
|
#ifdef DEBUG_QT_GLIBMAINLOOP
|
|
|
|
|
printf("inside gsourceCheck(1)\n");
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Socketnotifier events?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TQPtrList<TQSockNotGPollFD> *list = &d->sn_list;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//if ( list ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TQSockNotGPollFD *sn = list->first();
|
|
|
|
|
while ( sn ) {
|
|
|
|
|
if ( sn->gPollFD.revents )
|
|
|
|
|
return TRUE;
|
|
|
|
|
sn = list->next();
|
|
|
|
|
}
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
if (d->x_gPollFD.revents) {
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
if (d->x_gPollFD.revents) {
|
|
|
|
|
#ifdef DEBUG_QT_GLIBMAINLOOP
|
|
|
|
|
printf("inside gsourceCheck(2) xfd!\n");
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
return TRUE; // we got events!
|
|
|
|
|
}
|
|
|
|
|
if (d->threadPipe_gPollFD.revents) {
|
|
|
|
|
if (d->threadPipe_gPollFD.revents) {
|
|
|
|
|
#ifdef DEBUG_QT_GLIBMAINLOOP
|
|
|
|
|
printf("inside gsourceCheck(2) threadpipe!!\n");
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
return TRUE; // we got events!
|
|
|
|
|
}
|
|
|
|
|
if (hasPendingEvents()) {
|
|
|
|
|
#ifdef DEBUG_QT_GLIBMAINLOOP
|
|
|
|
|
printf("inside gsourceCheck(2) pendingEvents!\n");
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
return TRUE; // we got more X11 events!
|
|
|
|
|
}
|
|
|
|
|
// check if we have timers to activate?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
timeval * tm =qt_wait_timer();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (tm && (tm->tv_sec == 0 && tm->tv_usec == 0 )) {
|
|
|
|
|
#ifdef DEBUG_QT_GLIBMAINLOOP
|
|
|
|
|
printf("inside gsourceCheck(2) qtwaittimer!\n");
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// nothing to dispatch
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// nothing to dispatch
|
|
|
|
|
|
|
|
|
|
#ifdef DEBUG_QT_GLIBMAINLOOP
|
|
|
|
|
printf("inside gsourceCheck(2) nothing to dispatch!\n");
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool TQEventLoop::gsourceDispatch(GSource *gs) {
|
|
|
|
|
Q_UNUSED(gs);
|
|
|
|
|
|
|
|
|
|
// relock the GUI mutex before processing any pending events
|
|
|
|
|
// relock the GUI mutex before processing any pending events
|
|
|
|
|
#if defined(QT_THREAD_SUPPORT)
|
|
|
|
|
TQMutexLocker locker( TQApplication::tqt_mutex );
|
|
|
|
|
#endif
|
|
|
|
|
TQMutexLocker locker( TQApplication::tqt_mutex );
|
|
|
|
|
#endif
|
|
|
|
|
#if defined(QT_THREAD_SUPPORT)
|
|
|
|
|
locker.mutex()->lock();
|
|
|
|
|
locker.mutex()->lock();
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
int nevents=0;
|
|
|
|
@ -527,18 +535,20 @@ bool TQEventLoop::gsourceDispatch(GSource *gs) {
|
|
|
|
|
|
|
|
|
|
#ifdef DEBUG_QT_GLIBMAINLOOP
|
|
|
|
|
printf("inside gsourceDispatch(1)\n");
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
// we are awake, broadcast it
|
|
|
|
|
emit awake();
|
|
|
|
|
emit tqApp->guiThreadAwake();
|
|
|
|
|
|
|
|
|
|
// some other thread woke us up... consume the data on the thread pipe so that
|
|
|
|
|
// select doesn't immediately return next time
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ( d->threadPipe_gPollFD.revents) {
|
|
|
|
|
char c;
|
|
|
|
|
::read( d->thread_pipe[0], &c, 1 );
|
|
|
|
|
if (::read( d->thread_pipe[0], &c, 1 ) < 0) {
|
|
|
|
|
// Error!
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( qt_postselect_handler ) {
|
|
|
|
@ -552,8 +562,8 @@ bool TQEventLoop::gsourceDispatch(GSource *gs) {
|
|
|
|
|
// if select says data is ready on any socket, then set the socket notifier
|
|
|
|
|
// to pending
|
|
|
|
|
// if ( &d->sn_list ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TQPtrList<TQSockNotGPollFD> *list = &d->sn_list;
|
|
|
|
|
TQSockNotGPollFD *sn = list->first();
|
|
|
|
|
while ( sn ) {
|
|
|
|
@ -562,7 +572,7 @@ bool TQEventLoop::gsourceDispatch(GSource *gs) {
|
|
|
|
|
sn = list->next();
|
|
|
|
|
}
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nevents += activateSocketNotifiers();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -574,30 +584,35 @@ bool TQEventLoop::gsourceDispatch(GSource *gs) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// return true if we handled events, false otherwise
|
|
|
|
|
//return (nevents > 0);
|
|
|
|
|
|
|
|
|
|
// return true if we handled events, false otherwise
|
|
|
|
|
//return (nevents > 0);
|
|
|
|
|
|
|
|
|
|
// now process x11 events!
|
|
|
|
|
|
|
|
|
|
#ifdef DEBUG_QT_GLIBMAINLOOP
|
|
|
|
|
printf("inside gsourceDispatch(2) hasPendingEvents=%d\n", hasPendingEvents());
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (hasPendingEvents()) {
|
|
|
|
|
|
|
|
|
|
// color approx. optimization - only on X11
|
|
|
|
|
qt_reset_color_avail();
|
|
|
|
|
|
|
|
|
|
qt_reset_color_avail();
|
|
|
|
|
|
|
|
|
|
processX11Events();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(QT_THREAD_SUPPORT)
|
|
|
|
|
locker.mutex()->unlock();
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
if (d->singletoolkit) {
|
|
|
|
|
return TRUE; // Eat the event
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
return FALSE; // Pass the event on to GTK
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool TQEventLoop::hasPendingEvents() const
|
|
|
|
@ -616,3 +631,7 @@ void TQEventLoop::appClosingDown()
|
|
|
|
|
{
|
|
|
|
|
d->xfd = -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TQEventLoop::setSingleToolkitEventHandling(bool enabled) {
|
|
|
|
|
d->singletoolkit = enabled;
|
|
|
|
|
}
|