QPAEventDispatcherGlib: Use correct flags when sending events

Instead of assuming that all events should be handled when
a user event occurs, userEventSourceDispatch has to use the
flags used in QPAEventDispatcherGlib::processEvents.

Task-number: QTBUG-27595
Change-Id: Ib13607f89f7d3207ec83ab26f7d59b3c59a28c4e
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
bb10
Oliver Wolff 2012-11-20 18:04:42 +01:00 committed by The Qt Project
parent d48d83a1ac
commit cc7d085ca2
2 changed files with 18 additions and 3 deletions

View File

@ -71,9 +71,11 @@ static gboolean userEventSourceCheck(GSource *source)
return userEventSourcePrepare(source, 0);
}
static gboolean userEventSourceDispatch(GSource *, GSourceFunc, gpointer)
static gboolean userEventSourceDispatch(GSource *source, GSourceFunc, gpointer)
{
QWindowSystemInterface::sendWindowSystemEvents(QEventLoop::AllEvents);
GUserEventSource *userEventSource = reinterpret_cast<GUserEventSource *>(source);
QPAEventDispatcherGlib *dispatcher = userEventSource->q;
QWindowSystemInterface::sendWindowSystemEvents(dispatcher->m_flags);
return true;
}
@ -89,9 +91,10 @@ static GSourceFuncs userEventSourceFuncs = {
QPAEventDispatcherGlibPrivate::QPAEventDispatcherGlibPrivate(GMainContext *context)
: QEventDispatcherGlibPrivate(context)
{
Q_Q(QPAEventDispatcherGlib);
userEventSource = reinterpret_cast<GUserEventSource *>(g_source_new(&userEventSourceFuncs,
sizeof(GUserEventSource)));
userEventSource->q = 0;
userEventSource->q = q;
g_source_set_can_recurse(&userEventSource->source, true);
g_source_attach(&userEventSource->source, mainContext);
}
@ -99,6 +102,7 @@ QPAEventDispatcherGlibPrivate::QPAEventDispatcherGlibPrivate(GMainContext *conte
QPAEventDispatcherGlib::QPAEventDispatcherGlib(QObject *parent)
: QEventDispatcherGlib(*new QPAEventDispatcherGlibPrivate, parent)
, m_flags(QEventLoop::AllEvents)
{
Q_D(QPAEventDispatcherGlib);
d->userEventSource->q = this;
@ -113,4 +117,12 @@ QPAEventDispatcherGlib::~QPAEventDispatcherGlib()
d->userEventSource = 0;
}
bool QPAEventDispatcherGlib::processEvents(QEventLoop::ProcessEventsFlags flags)
{
Q_D(QPAEventDispatcherGlib);
m_flags = flags;
QEventDispatcherGlib::processEvents(m_flags);
}
QT_END_NAMESPACE

View File

@ -68,6 +68,9 @@ class QPAEventDispatcherGlib : public QEventDispatcherGlib
public:
explicit QPAEventDispatcherGlib(QObject *parent = 0);
~QPAEventDispatcherGlib();
bool processEvents(QEventLoop::ProcessEventsFlags flags);
QEventLoop::ProcessEventsFlags m_flags;
};
struct GUserEventSource;