3#ifndef QXCBEVENTQUEUE_H
4#define QXCBEVENTQUEUE_H
6#include <QtCore/QThread>
8#include <QtCore/QEventLoop>
10#include <QtCore/QMutex>
11#include <QtCore/QWaitCondition>
65 bool isEmpty()
const {
return m_head == m_flushedTail && !m_head->
event; }
66 xcb_generic_event_t *
takeFirst(QEventLoop::ProcessEventsFlags
flags);
74 template<
typename Peeker>
75 xcb_generic_event_t *
peek(Peeker &&peeker) {
78 template<
typename Peeker>
90 unsigned long time = (std::numeric_limits<unsigned long>::max)());
96 void sendCloseConnectionEvent()
const;
97 bool isCloseConnectionEvent(
const xcb_generic_event_t *
event);
101 std::atomic<QXcbEventNode *> m_tail {
nullptr };
102 std::atomic_uint m_nodesRestored { 0 };
105 bool m_closeConnectionDetected =
false;
108 uint m_poolIndex = 0;
110 qint32 m_peekerIdSource = 0;
111 bool m_queueModified =
false;
112 bool m_peekerIndexCacheDirty =
false;
124template<
typename Peeker>
133 xcb_generic_event_t *
event = node->
event;
136 node->
event =
nullptr;
141 if (node == m_flushedTail)
bool(*)(xcb_generic_event_t *event, void *peekerData) PeekerCallback
bool removePeekerId(qint32 peekerId)
qint32 generatePeekerId()
const QXcbEventNode * flushedTail() const
@ PeekConsumeMatchAndContinue
xcb_generic_event_t * peek(Peeker &&peeker)
xcb_generic_event_t * takeFirst()
void flushBufferedEvents()
void waitForNewEvents(const QXcbEventNode *sinceFlushedTail, unsigned long time=(std::numeric_limits< unsigned long >::max)())
bool peekEventQueue(PeekerCallback peeker, void *peekerData=nullptr, PeekOptions option=PeekDefault, qint32 peekerId=-1)
Combined button and popup list for selecting options.
DBusConnection * connection
#define Q_DECLARE_FLAGS(Flags, Enum)
unsigned long long quint64
xcb_generic_event_t * event
QXcbEventNode(xcb_generic_event_t *e=nullptr)