Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qeventdispatcher_glib.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
5
7
8#include "qplatformdefs.h"
9
10#include <glib.h>
11#include "private/qguiapplication_p.h"
12
14
21
22static gboolean userEventSourcePrepare(GSource *source, gint *timeout)
23{
24 Q_UNUSED(timeout);
25 GUserEventSource *userEventSource = reinterpret_cast<GUserEventSource *>(source);
26 return userEventSource->d->wakeUpCalled;
27}
28
29static gboolean userEventSourceCheck(GSource *source)
30{
31 return userEventSourcePrepare(source, nullptr);
32}
33
35{
36 GUserEventSource *userEventSource = reinterpret_cast<GUserEventSource *>(source);
37 QPAEventDispatcherGlib *dispatcher = userEventSource->q;
38 QWindowSystemInterface::sendWindowSystemEvents(dispatcher->m_flags);
39 return true;
40}
41
43 userEventSourcePrepare,
44 userEventSourceCheck,
45 userEventSourceDispatch,
46 NULL,
47 NULL,
48 NULL
49};
50
51QPAEventDispatcherGlibPrivate::QPAEventDispatcherGlibPrivate(GMainContext *context)
52 : QEventDispatcherGlibPrivate(context)
53{
54 Q_Q(QPAEventDispatcherGlib);
55
56 GSource *source = g_source_new(&userEventSourceFuncs, sizeof(GUserEventSource));
57 g_source_set_name(source, "[Qt] GUserEventSource");
58 userEventSource = reinterpret_cast<GUserEventSource *>(source);
59
60 userEventSource->q = q;
61 userEventSource->d = this;
62 g_source_set_can_recurse(&userEventSource->source, true);
63 g_source_attach(&userEventSource->source, mainContext);
64}
65
67 = default;
68
69QPAEventDispatcherGlib::QPAEventDispatcherGlib(QObject *parent)
70 : QEventDispatcherGlib(*new QPAEventDispatcherGlibPrivate, parent)
71 , m_flags(QEventLoop::AllEvents)
72{
73 Q_D(QPAEventDispatcherGlib);
74 d->userEventSource->q = this;
75}
76
77QPAEventDispatcherGlib::~QPAEventDispatcherGlib()
78{
79 Q_D(QPAEventDispatcherGlib);
80
81 g_source_destroy(&d->userEventSource->source);
82 g_source_unref(&d->userEventSource->source);
83 d->userEventSource = nullptr;
84}
85
86bool QPAEventDispatcherGlib::processEvents(QEventLoop::ProcessEventsFlags flags)
87{
88 m_flags = flags;
89 return QEventDispatcherGlib::processEvents(m_flags);
90}
91
92QT_END_NAMESPACE
93
94#include "moc_qeventdispatcher_glib_p.cpp"
~QPAEventDispatcherGlibPrivate() override
static GSourceFuncs userEventSourceFuncs
static gboolean userEventSourcePrepare(GSource *source, gint *timeout)
static gboolean userEventSourceDispatch(GSource *source, GSourceFunc, gpointer)
static gboolean userEventSourceCheck(GSource *source)
Combined button and popup list for selecting options.
QPAEventDispatcherGlib * q
QPAEventDispatcherGlibPrivate * d