summaryrefslogtreecommitdiff
path: root/src/client/qwaylanddisplay_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/qwaylanddisplay_p.h')
-rw-r--r--src/client/qwaylanddisplay_p.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/client/qwaylanddisplay_p.h b/src/client/qwaylanddisplay_p.h
index a52c89fe..188e9131 100644
--- a/src/client/qwaylanddisplay_p.h
+++ b/src/client/qwaylanddisplay_p.h
@@ -55,6 +55,8 @@
#include <QtCore/QRect>
#include <QtCore/QPointer>
#include <QtCore/QVector>
+#include <QtCore/QMutex>
+#include <QtCore/QReadWriteLock>
#include <QtCore/QWaitCondition>
#include <QtCore/QLoggingCategory>
@@ -118,6 +120,12 @@ class Q_WAYLAND_CLIENT_EXPORT QWaylandDisplay : public QObject, public QtWayland
Q_OBJECT
public:
+ struct FrameQueue {
+ FrameQueue(wl_event_queue *q = nullptr) : queue(q), mutex(new QMutex) {}
+ wl_event_queue *queue;
+ QMutex *mutex;
+ };
+
QWaylandDisplay(QWaylandIntegration *waylandIntegration);
~QWaylandDisplay(void) override;
@@ -205,6 +213,8 @@ public:
void handleWindowDestroyed(QWaylandWindow *window);
wl_event_queue *createEventQueue();
+ FrameQueue createFrameQueue();
+ void destroyFrameQueue(const FrameQueue &q);
void dispatchQueueWhile(wl_event_queue *queue, std::function<bool()> condition, int timeout = -1);
public slots:
@@ -266,8 +276,10 @@ private:
QPointer<QWaylandWindow> mLastInputWindow;
QPointer<QWaylandWindow> mLastKeyboardFocus;
QVector<QWaylandWindow *> mActiveWindows;
+ QVector<FrameQueue> mExternalQueues;
struct wl_callback *mSyncCallback = nullptr;
static const wl_callback_listener syncCallbackListener;
+ QReadWriteLock m_frameQueueLock;
bool mClientSideInputContextRequested = !QPlatformInputContextFactory::requested().isNull();
bool mUsingInputContextFromCompositor = false;