diff options
Diffstat (limited to 'src/client/qwaylanddisplay_p.h')
-rw-r--r-- | src/client/qwaylanddisplay_p.h | 12 |
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; |