diff options
author | Morten Sorvig <morten.sorvig@nokia.com> | 2011-06-23 09:05:34 +0200 |
---|---|---|
committer | Morten Sorvig <morten.sorvig@nokia.com> | 2011-06-23 11:04:21 +0200 |
commit | 58d10c0bd7cff2009edf6183c660b2e149eb9a82 (patch) | |
tree | 85ef2a3b398932fdc1c5db5ebbb4b5312742a201 /src/platformsupport/eventdispatchers | |
parent | c359cf0017e83b9cbfdf88c1fef16f84865ca0a8 (diff) |
Refactor window system event dispatching.
Add QWindowSystemInterface::sendWindowSystemEvents,
which contains the canonical "empty and send queued
window system events" implementation.
Make the Cocoa, QPA, and GLIB dispatchers use the
new implementation. Cocoa now no longer inherits
from QPA.
Diffstat (limited to 'src/platformsupport/eventdispatchers')
-rw-r--r-- | src/platformsupport/eventdispatchers/qeventdispatcher_glib.cpp | 18 | ||||
-rw-r--r-- | src/platformsupport/eventdispatchers/qeventdispatcher_qpa.cpp | 41 |
2 files changed, 7 insertions, 52 deletions
diff --git a/src/platformsupport/eventdispatchers/qeventdispatcher_glib.cpp b/src/platformsupport/eventdispatchers/qeventdispatcher_glib.cpp index 39b14e32af..3d28ea29a1 100644 --- a/src/platformsupport/eventdispatchers/qeventdispatcher_glib.cpp +++ b/src/platformsupport/eventdispatchers/qeventdispatcher_glib.cpp @@ -74,26 +74,10 @@ static gboolean userEventSourceCheck(GSource *source) static gboolean userEventSourceDispatch(GSource *s, GSourceFunc, gpointer) { GUserEventSource * source = reinterpret_cast<GUserEventSource *>(s); - - QWindowSystemInterfacePrivate::WindowSystemEvent * event; - while (QWindowSystemInterfacePrivate::windowSystemEventsQueued()) { - event = QWindowSystemInterfacePrivate::getWindowSystemEvent(); - if (!event) - break; - - // send through event filter - if (source->q->filterEvent(event)) { - delete event; - continue; - } - QGuiApplicationPrivate::processWindowSystemEvent(event); - delete event; - } - + QWindowSystemInterface::sendWindowSystemEvents(source->q, flags); return true; } - static GSourceFuncs userEventSourceFuncs = { userEventSourcePrepare, userEventSourceCheck, diff --git a/src/platformsupport/eventdispatchers/qeventdispatcher_qpa.cpp b/src/platformsupport/eventdispatchers/qeventdispatcher_qpa.cpp index e6bd4c7f6b..db20797023 100644 --- a/src/platformsupport/eventdispatchers/qeventdispatcher_qpa.cpp +++ b/src/platformsupport/eventdispatchers/qeventdispatcher_qpa.cpp @@ -83,43 +83,14 @@ bool QEventDispatcherQPA::processEvents(QEventLoop::ProcessEventsFlags flags) { Q_D(QEventDispatcherQPA); - int nevents = 0; - - // handle gui and posted events - d->interrupt = false; - QCoreApplication::sendPostedEvents(); - - while (!d->interrupt) { // also flushes output buffer ###can be optimized - QWindowSystemInterfacePrivate::WindowSystemEvent *event; - if (!(flags & QEventLoop::ExcludeUserInputEvents) - && QWindowSystemInterfacePrivate::windowSystemEventsQueued() > 0) { - // process a pending user input event - event = QWindowSystemInterfacePrivate::getWindowSystemEvent(); - if (!event) - break; - } else { - break; - } - - if (filterEvent(event)) { - delete event; - continue; - } - nevents++; - - QGuiApplicationPrivate::processWindowSystemEvent(event); - delete event; - } + bool didSendEvents = QWindowSystemInterface::sendWindowSystemEvents(this, flags); -#ifdef Q_OS_MAC // (inverted inheritance on mac: QEventDispatcherMac calls QEventDispatcherQPA) - if (!d->interrupt) { - if (EVENTDISPATCHERBASE::processEvents(flags)) { - EVENTDISPATCHERBASE::processEvents(flags); - return true; - } + if (EVENTDISPATCHERBASE::processEvents(flags)) { + EVENTDISPATCHERBASE::processEvents(flags); + return true; } -#endif - return (nevents > 0); + + return didSendEvents; } bool QEventDispatcherQPA::hasPendingEvents() |