diff options
Diffstat (limited to 'src/gui/kernel/qwidget_x11.cpp')
-rw-r--r-- | src/gui/kernel/qwidget_x11.cpp | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/src/gui/kernel/qwidget_x11.cpp b/src/gui/kernel/qwidget_x11.cpp index 4cdd6e7..3cff3ee 100644 --- a/src/gui/kernel/qwidget_x11.cpp +++ b/src/gui/kernel/qwidget_x11.cpp @@ -44,6 +44,7 @@ #include "qdesktopwidget.h" #include "qapplication.h" #include "qapplication_p.h" +#include "qabstracteventdispatcher.h" #include "qnamespace.h" #include "qpainter.h" #include "qbitmap.h" @@ -376,17 +377,21 @@ void qt_x11_wait_for_window_manager(QWidget *w, bool sendPostedEvents) do { if (XEventsQueued(X11->display, QueuedAlready)) { XNextEvent(X11->display, &ev); - qApp->x11ProcessEvent(&ev); - - switch (state) { - case Initial: - if (ev.type == MapNotify && ev.xany.window == winid) - state = Mapped; - break; - case Mapped: - if (ev.type == Expose && ev.xany.window == winid) - return; - break; + // Pass the event through the event dispatcher filter so that applications + // which install an event filter on the dispatcher get to handle it first. + if (!QAbstractEventDispatcher::instance()->filterEvent(&ev)) { + qApp->x11ProcessEvent(&ev); + + switch (state) { + case Initial: + if (ev.type == MapNotify && ev.xany.window == winid) + state = Mapped; + break; + case Mapped: + if (ev.type == Expose && ev.xany.window == winid) + return; + break; + } } } else { if (!XEventsQueued(X11->display, QueuedAfterFlush)) |