summaryrefslogtreecommitdiffstats
path: root/src/gui/platform/unix/qeventdispatcher_glib.cpp
blob: 964d844bd5369380a3b80da17bb4b8d2ef6ee82c (plain)
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
// Copyright (C) 2016 The Qt Company Ltd.// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only#include"qeventdispatcher_glib_p.h"#include"qguiapplication.h"#include"qplatformdefs.h"#include <glib.h>#include"private/qguiapplication_p.h" QT_BEGIN_NAMESPACE struct GUserEventSource { GSource source; QPAEventDispatcherGlib *q; QPAEventDispatcherGlibPrivate *d;};static gboolean userEventSourcePrepare(GSource *source, gint *timeout){Q_UNUSED(timeout); GUserEventSource *userEventSource =reinterpret_cast<GUserEventSource *>(source);return userEventSource->d->wakeUpCalled;}static gboolean userEventSourceCheck(GSource *source){returnuserEventSourcePrepare(source,nullptr);}static gboolean userEventSourceDispatch(GSource *source, GSourceFunc, gpointer){ GUserEventSource *userEventSource =reinterpret_cast<GUserEventSource *>(source); QPAEventDispatcherGlib *dispatcher = userEventSource->q;QWindowSystemInterface::sendWindowSystemEvents(dispatcher->m_flags);return true;}static GSourceFuncs userEventSourceFuncs = { userEventSourcePrepare, userEventSourceCheck, userEventSourceDispatch, NULL, NULL, NULL };QPAEventDispatcherGlibPrivate::QPAEventDispatcherGlibPrivate(GMainContext *context):QEventDispatcherGlibPrivate(context){Q_Q(QPAEventDispatcherGlib); GSource *source =g_source_new(&userEventSourceFuncs,sizeof(GUserEventSource));g_source_set_name(source,"[Qt] GUserEventSource"); userEventSource =reinterpret_cast<GUserEventSource *>(source); userEventSource->q = q; userEventSource->d =this;g_source_set_can_recurse(&userEventSource->source,true);g_source_attach(&userEventSource->source, mainContext);}QPAEventDispatcherGlibPrivate::~QPAEventDispatcherGlibPrivate()=default;QPAEventDispatcherGlib::QPAEventDispatcherGlib(QObject *parent):QEventDispatcherGlib(*new QPAEventDispatcherGlibPrivate, parent),m_flags(QEventLoop::AllEvents){Q_D(QPAEventDispatcherGlib); d->userEventSource->q =this;}QPAEventDispatcherGlib::~QPAEventDispatcherGlib(){Q_D(QPAEventDispatcherGlib);g_source_destroy(&d->userEventSource->source);g_source_unref(&d->userEventSource->source); d->userEventSource =nullptr;}boolQPAEventDispatcherGlib::processEvents(QEventLoop::ProcessEventsFlags flags){ m_flags = flags;returnQEventDispatcherGlib::processEvents(m_flags);} QT_END_NAMESPACE #include"moc_qeventdispatcher_glib_p.cpp"
close