summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
l---------include/private/qeventloop_glib_p.h1
-rw-r--r--src/kernel/ntqeventloop.h12
-rw-r--r--src/kernel/qeventloop_glib_p.h2
-rw-r--r--src/kernel/qeventloop_x11.cpp4
-rw-r--r--src/kernel/qeventloop_x11_glib.cpp125
-rw-r--r--src/kernel/qt_kernel.pri1
6 files changed, 90 insertions, 55 deletions
diff --git a/include/private/qeventloop_glib_p.h b/include/private/qeventloop_glib_p.h
new file mode 120000
index 00000000..04493aa6
--- /dev/null
+++ b/include/private/qeventloop_glib_p.h
@@ -0,0 +1 @@
+../../src/kernel/qeventloop_glib_p.h \ No newline at end of file
diff --git a/src/kernel/ntqeventloop.h b/src/kernel/ntqeventloop.h
index 23a3b38b..21410123 100644
--- a/src/kernel/ntqeventloop.h
+++ b/src/kernel/ntqeventloop.h
@@ -44,9 +44,12 @@
#include "ntqsocketnotifier.h"
#endif // QT_H
+#ifdef Q_QDOC
+#else // Q_QDOC
#if defined(QT_USE_GLIBMAINLOOP)
#include <glib.h>
#endif // QT_USE_GLIBMAINLOOP
+#endif // Q_QDOC
class TQEventLoopPrivate;
class TQSocketNotifier;
@@ -99,7 +102,9 @@ public:
virtual void wakeUp();
-#if defined(QT_USE_GLIBMAINLOOP)
+#ifdef Q_QDOC
+#else // Q_QDOC
+#if defined(QT_USE_GLIBMAINLOOP)
// glib main loop support
@@ -114,7 +119,10 @@ public:
// end glib main loop support
#endif //QT_USE_GLIBMAINLOOP
-
+#endif // Q_QDOC
+
+ void setSingleToolkitEventHandling(bool enabled);
+
signals:
void awake();
void aboutToBlock();
diff --git a/src/kernel/qeventloop_glib_p.h b/src/kernel/qeventloop_glib_p.h
index ac5cb6b3..057bcf86 100644
--- a/src/kernel/qeventloop_glib_p.h
+++ b/src/kernel/qeventloop_glib_p.h
@@ -95,6 +95,7 @@ public:
quitnow = FALSE;
exitloop = FALSE;
shortcut = FALSE;
+ singletoolkit = TRUE;
}
int looplevel;
@@ -124,6 +125,7 @@ public:
// My GSource
GSource * gSource;
+ bool singletoolkit;
};
diff --git a/src/kernel/qeventloop_x11.cpp b/src/kernel/qeventloop_x11.cpp
index 0ae38705..56542710 100644
--- a/src/kernel/qeventloop_x11.cpp
+++ b/src/kernel/qeventloop_x11.cpp
@@ -415,3 +415,7 @@ void TQEventLoop::appClosingDown()
{
d->xfd = -1;
}
+
+void TQEventLoop::setSingleToolkitEventHandling(bool enabled) {
+ // Do nothing
+} \ No newline at end of file
diff --git a/src/kernel/qeventloop_x11_glib.cpp b/src/kernel/qeventloop_x11_glib.cpp
index 62584d2a..11141a3a 100644
--- a/src/kernel/qeventloop_x11_glib.cpp
+++ b/src/kernel/qeventloop_x11_glib.cpp
@@ -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;
+} \ No newline at end of file
diff --git a/src/kernel/qt_kernel.pri b/src/kernel/qt_kernel.pri
index d589cdf2..490f06a4 100644
--- a/src/kernel/qt_kernel.pri
+++ b/src/kernel/qt_kernel.pri
@@ -23,6 +23,7 @@ kernel {
$$KERNEL_H/ntqevent.h \
$$KERNEL_H/ntqeventloop.h \
$$KERNEL_P/qeventloop_p.h \
+ $$KERNEL_P/qeventloop_glib_p.h \
$$KERNEL_H/ntqfocusdata.h \
$$KERNEL_H/ntqfont.h \
$$KERNEL_P/qfontdata_p.h \