--- a/Quail-redux.pro Mon Sep 16 16:27:25 2013 +0100
+++ b/Quail-redux.pro Tue Sep 17 13:59:34 2013 +0100
@@ -30,6 +30,46 @@
+ CONFIG += link_pkgconfig + PKGCONFIG += purple glib-2.0 gmodule-2.0 + HEADERS += src/QuailWinGlibEventLoop.h + SOURCES += src/QuailWinGlibEventLoop.cpp + INCLUDEPATH += /cygdrive/c/dev/win32-dev/gtk_2_0-2.14/include/glib-2.0 \ + /cygdrive/c/dev/win32-dev/gtk_2_0-2.14/include/glib-2.0/include \ + /cygdrive/c/dev/pidgin-main \ + c:/dev/win32-dev/gtk_2_0-2.14/include/glib-2.0 \ + C:/dev/win32-dev/gtk_2_0-2.14/lib/glib-2.0/include + LIBS += -L"C:/dev/win32-dev/gtk-2.24.10/lib" + LIBS += -L"C:/dev/pidgin-main/libpurple" + LIBS += -L"C:/Qt/4.8.5/lib" + LIBS += -L"/cygdrive/c/Qt/4.8.5/lib" + LIBS += -llibpurple -lglib-2.0 -lgmodule-2.0 src/QuailAccountEditor.h \
@@ -83,50 +123,12 @@
src/QuailConvDisplay.cpp \
src/QuailStatusSelector.cpp \
- CONFIG += link_pkgconfig
- PKGCONFIG += purple glib-2.0 gmodule-2.0
- HEADERS += src/QuailWinGlibEventLoop.h
- SOURCES += src/QuailWinGlibEventLoop.cpp
- INCLUDEPATH += /cygdrive/c/dev/win32-dev/gtk_2_0-2.14/include/glib-2.0 \
- /cygdrive/c/dev/win32-dev/gtk_2_0-2.14/include/glib-2.0/include \
- /cygdrive/c/dev/pidgin-main \
- c:/dev/win32-dev/gtk_2_0-2.14/include/glib-2.0 \
- C:/dev/win32-dev/gtk_2_0-2.14/lib/glib-2.0/include
- LIBS += -L"C:/dev/win32-dev/gtk-2.24.10/lib"
- LIBS += -L"C:/dev/pidgin-main/libpurple"
- LIBS += -L"C:/Qt/4.8.5/lib"
- LIBS += -L"/cygdrive/c/Qt/4.8.5/lib"
- LIBS += -llibpurple -lglib-2.0 -lgmodule-2.0
INCLUDEPATH += $$(LIBPURPLE_ROOT)
#INCLUDEPATH += $$(QTDIR)
--- a/src/QuailWinGlibEventLoop.cpp Mon Sep 16 16:27:25 2013 +0100
+++ b/src/QuailWinGlibEventLoop.cpp Tue Sep 17 13:59:34 2013 +0100
@@ -195,7 +195,7 @@
- QuailEventDispatcherWinGlibPrivate *d;
+ QuailEventDispatcherWinGlib *d; static gboolean postEventSourcePrepare(GSource *s, gint *timeout)
@@ -462,8 +462,6 @@
-class QuailEventDispatcherWinGlibPrivate;
#if !defined(DWORD_PTR) && !defined(Q_OS_WIN64)
@@ -502,8 +500,8 @@
-QuailEventDispatcherWinGlibPrivate::QuailEventDispatcherWinGlibPrivate(GMainContext *context = 0)
- : mainContext(context), threadId(GetCurrentThreadId()), interrupt(false), internalHwnd(0), getMessageHook(0),
+QuailEventDispatcherWinGlib::QuailEventDispatcherWinGlib(GMainContext *context = 0, QObject parent = 0) + : mainContext(context), threadId(GetCurrentThreadId()), interruptFlag(false), internalHwnd(0), getMessageHook(0), serialNumber(0), lastSerialNumber(0), sendPostedEventsWindowsTimerId(0), wakeUps(0)
@@ -566,12 +564,12 @@
-void QuailEventDispatcherWinGlibPrivate::runTimersOnceWithNormalPriority()
+void QuailEventDispatcherWinGlib::runTimersOnceWithNormalPriority() timerSource->runWithIdlePriority = false;
-QuailEventDispatcherWinGlibPrivate::~QuailEventDispatcherWinGlibPrivate()
+QuailEventDispatcherWinGlib::~QuailEventDispatcherWinGlib() DestroyWindow(internalHwnd);
@@ -579,7 +577,7 @@
UnregisterClass((wchar_t*)className.utf16(), qWinAppInst());
-void QuailEventDispatcherWinGlibPrivate::activateEventNotifier(QWinEventNotifier * wen)
+void QuailEventDispatcherWinGlib::activateEventNotifier(QWinEventNotifier * wen) QEvent event(QEvent::WinEventAct);
QCoreApplication::sendEvent(wen, &event);
@@ -620,7 +618,7 @@
QuailEventDispatcherWinGlib *q = (QuailEventDispatcherWinGlib *) GetWindowLong(hwnd, GWL_USERDATA);
- QuailEventDispatcherWinGlibPrivate *d = 0;
+ QuailEventDispatcherWinGlib *d = 0; @@ -687,7 +685,7 @@
- QuailEventDispatcherWinGlibPrivate *d = q->d_func();
+ QuailEventDispatcherWinGlib *d = q->d_func(); const int localSerialNumber = d->serialNumber.load();
if (HIWORD(GetQueueStatus(QS_TIMER | QS_INPUT | QS_RAWINPUT)) == 0) {
// no more input or timer events in the message queue, we can allow posted events to be sent normally now
@@ -768,7 +766,7 @@
-void QuailEventDispatcherWinGlibPrivate::registerTimer(WinTimerInfo *t)
+void QuailEventDispatcherWinGlib::registerTimer(WinTimerInfo *t) @@ -798,7 +796,7 @@
qErrnoWarning("QuailEventDispatcherWinGlib::registerTimer: Failed to create a timer");
-void QuailEventDispatcherWinGlibPrivate::unregisterTimer(WinTimerInfo *t)
+void QuailEventDispatcherWinGlib::unregisterTimer(WinTimerInfo *t) QCoreApplicationPrivate::removePostedTimerEvent(t->dispatcher, t->timerId);
@@ -811,7 +809,7 @@
-void QuailEventDispatcherWinGlibPrivate::sendTimerEvent(int timerId)
+void QuailEventDispatcherWinGlib::sendTimerEvent(int timerId) WinTimerInfo *t = timerDict.value(timerId);
if (t && !t->inTimerEvent) {
@@ -829,7 +827,7 @@
-void QuailEventDispatcherWinGlibPrivate::doWsaAsyncSelect(int socket)
+void QuailEventDispatcherWinGlib::doWsaAsyncSelect(int socket) @@ -876,19 +874,6 @@
-QuailEventDispatcherWinGlib::QuailEventDispatcherWinGlib(QObject *parent)
- : QAbstractEventDispatcher(*new QuailEventDispatcherWinGlibPrivate, parent)
-QuailEventDispatcherWinGlib::QuailEventDispatcherWinGlib(QuailEventDispatcherWinGlibPrivate &dd, QObject *parent)
- : QAbstractEventDispatcher(dd, parent)
-QuailEventDispatcherWinGlib::~QuailEventDispatcherWinGlib()
bool QuailEventDispatcherWinGlib::processEvents(QEventLoop::ProcessEventsFlags flags)
Q_D(QuailEventDispatcherWinGlib);
@@ -896,7 +881,7 @@
+ d->interruptFlag = false; @@ -907,7 +892,7 @@
HANDLE pHandles[MAXIMUM_WAIT_OBJECTS - 1];
QVarLengthArray<MSG> processedTimers;
- while (!d->interrupt) {
+ while (!d->interruptFlag) { DWORD nCount = d->winEventNotifierList.count();
Q_ASSERT(nCount < MAXIMUM_WAIT_OBJECTS - 1);
@@ -1003,7 +988,7 @@
// still nothing - wait for message or signalled objects
&& (flags & QEventLoop::WaitForMoreEvents));
DWORD nCount = d->winEventNotifierList.count();
@@ -1309,7 +1294,7 @@
void QuailEventDispatcherWinGlib::interrupt()
Q_D(QuailEventDispatcherWinGlib);
+ d->interruptFlag = true; --- a/src/QuailWinGlibEventLoop.h Mon Sep 16 16:27:25 2013 +0100
+++ b/src/QuailWinGlibEventLoop.h Tue Sep 17 13:59:34 2013 +0100
@@ -2,6 +2,7 @@
#define QUAILWINGLIBEVENTLOOP_H
#include "QtCore/qt_windows.h"
+#include "QtCore/qcoreevent.h" #include <QAbstractEventDispatcher>
@@ -14,56 +15,6 @@
LRESULT QT_WIN_CALLBACK qt_internal_proc(HWND hwnd, UINT message, WPARAM wp, LPARAM lp);
-class QuailEventDispatcherWinGlib : public QAbstractEventDispatcher
- Q_DECLARE_PRIVATE(QuailEventDispatcherWinGlib)
- void createInternalHwnd();
- explicit QuailEventDispatcherWinGlib(QObject parent = 0);
- explicit QuailEventDispatcherWinGlib(GMainContext *context, QObject *parent = 0);
- ~QuailEventDispatcherWinGlib();
- bool QT_ENSURE_STACK_ALIGNED_FOR_SSE processEvents(QEventLoop::ProcessEventsFlags flags);
- bool hasPendingEvents();
- void registerSocketNotifier(QSocketNotifier *notifier);
- void unregisterSocketNotifier(QSocketNotifier *notifier);
- void registerTimer(int timerId, int interval, Qt::TimerType timerType, QObject *object);
- bool unregisterTimer(int timerId);
- bool unregisterTimers(QObject *object);
- QList<TimerInfo> registeredTimers(QObject *object) const;
- bool registerEventNotifier(QWinEventNotifier *notifier);
- void unregisterEventNotifier(QWinEventNotifier *notifier);
- void activateEventNotifiers();
- int remainingTime(int timerId);
- static bool versionSupported();
- QuailEventDispatcherWinGlib(QuailEventDispatcherWinGlibPrivate &dd, QObject *parent = 0);
- virtual void sendPostedEvents();
- friend LRESULT QT_WIN_CALLBACK qt_internal_proc(HWND hwnd, UINT message, WPARAM wp, LPARAM lp);
- friend LRESULT QT_WIN_CALLBACK qt_GetMessageHook(int, WPARAM, LPARAM);
struct GSocketNotifierSource;
@@ -98,12 +49,43 @@
typedef QList<WinTimerInfo*> WinTimerVec; // vector of TimerInfo structs
typedef QHash<int, WinTimerInfo*> WinTimerDict; // fast dict of timers
-class Q_CORE_EXPORT QuailEventDispatcherWinGlibPrivate : public QAbstractEventDispatcherPrivate
+class QuailEventDispatcherWinGlib : public QAbstractEventDispatcher - Q_DECLARE_PUBLIC(QuailEventDispatcherWinGlib)
+ void createInternalHwnd(); - QuailEventDispatcherWinGlibPrivate(GMainContext *context = 0);
- ~QuailEventDispatcherWinGlibPrivate();
+ explicit QuailEventDispatcherWinGlib(GMainContext *context = 0, QObject *parent = 0); + ~QuailEventDispatcherWinGlib(); + bool QT_ENSURE_STACK_ALIGNED_FOR_SSE processEvents(QEventLoop::ProcessEventsFlags flags); + bool hasPendingEvents(); + void registerSocketNotifier(QSocketNotifier *notifier); + void unregisterSocketNotifier(QSocketNotifier *notifier); + void registerTimer(int timerId, int interval, Qt::TimerType timerType, QObject *object); + bool unregisterTimer(int timerId); + bool unregisterTimers(QObject *object); + QList<TimerInfo> registeredTimers(QObject *object) const; + bool registerEventNotifier(QWinEventNotifier *notifier); + void unregisterEventNotifier(QWinEventNotifier *notifier); + void activateEventNotifiers(); + int remainingTime(int timerId); + static bool versionSupported(); GMainContext *mainContext;
GPostEventSource *postEventSource;
@@ -115,7 +97,7 @@
// internal window handle used for socketnotifiers/timers/etc
@@ -144,6 +126,14 @@
QList<MSG> queuedUserInputEvents;
QList<MSG> queuedSocketEvents;
+ virtual void sendPostedEvents(); + friend LRESULT QT_WIN_CALLBACK qt_internal_proc(HWND hwnd, UINT message, WPARAM wp, LPARAM lp); + friend LRESULT QT_WIN_CALLBACK qt_GetMessageHook(int, WPARAM, LPARAM); #endif // QUAILWINGLIBEVENTLOOP_H
--- a/src/main.cpp Mon Sep 16 16:27:25 2013 +0100
+++ b/src/main.cpp Tue Sep 17 13:59:34 2013 +0100
@@ -20,10 +20,10 @@
-#include "QuailEventLoop.h"
#include "QuailWinGlibEventLoop.h"
#include "QuailMainWindow.h"
@@ -31,7 +31,7 @@
int main(int argc, char *argv[])
- QuailWinGlibEventLoop quailEventLoop;
+ QuailEventDispatcherWinGlib quailEventLoop; QApplication a(argc, argv);