summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/wayland/qwaylanddisplay.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/wayland/qwaylanddisplay.h')
-rw-r--r--src/plugins/platforms/wayland/qwaylanddisplay.h55
1 files changed, 32 insertions, 23 deletions
diff --git a/src/plugins/platforms/wayland/qwaylanddisplay.h b/src/plugins/platforms/wayland/qwaylanddisplay.h
index d994ffe..a2cb1b2 100644
--- a/src/plugins/platforms/wayland/qwaylanddisplay.h
+++ b/src/plugins/platforms/wayland/qwaylanddisplay.h
@@ -44,19 +44,17 @@
#include <QtCore/QObject>
#include <QtCore/QRect>
-#include <QtCore/QDataStream>
-#include <QtCore/QTextStream>
-#include <QtCore/QMetaType>
-#include <QtGui>
-#include "qwaylandinclude.h"
+#include <QtCore/QWaitCondition>
+
+#include <wayland-client.h>
class QWaylandInputDevice;
class QSocketNotifier;
class QWaylandBuffer;
class QPlatformScreen;
class QWaylandScreen;
-
+class QWaylandGLIntegration;
class QWaylandDisplay : public QObject {
Q_OBJECT
@@ -64,61 +62,72 @@ public:
QWaylandDisplay(void);
~QWaylandDisplay(void);
- void createNewScreen(struct wl_output *output, QRect geometry);
QList<QPlatformScreen *> screens() const { return mScreens; }
- struct wl_surface *createSurface();
+ struct wl_surface *createSurface(void *handle);
struct wl_buffer *createShmBuffer(int fd, int width, int height,
uint32_t stride,
struct wl_visual *visual);
struct wl_visual *rgbVisual();
struct wl_visual *argbVisual();
struct wl_visual *argbPremultipliedVisual();
- struct wl_egl_display *nativeDisplay();
- EGLDisplay eglDisplay() { return mEglDisplay; }
+#ifdef QT_WAYLAND_GL_SUPPORT
+ QWaylandGLIntegration *eglIntegration();
+#endif
void setCursor(QWaylandBuffer *buffer, int32_t x, int32_t y);
void syncCallback(wl_display_sync_func_t func, void *data);
- void frameCallback(wl_display_frame_func_t func, void *data);
+ void frameCallback(wl_display_frame_func_t func, struct wl_surface *surface, void *data);
- void iterate();
+ struct wl_display *wl_display() const { return mDisplay; }
+
+ QList<QWaylandInputDevice *> inputDevices() const { return mInputDevices; }
public slots:
- void readEvents(void);
- void flushRequests(void);
+ void createNewScreen(struct wl_output *output, QRect geometry);
+ void readEvents();
+ void blockingReadEvents();
+ void flushRequests();
private:
+ void waitForScreens();
+ void displayHandleGlobal(uint32_t id,
+ const QByteArray &interface,
+ uint32_t version);
+
struct wl_display *mDisplay;
struct wl_compositor *mCompositor;
struct wl_shm *mShm;
struct wl_shell *mShell;
- char *mDeviceName;
- int mFd;
QList<QPlatformScreen *> mScreens;
QList<QWaylandInputDevice *> mInputDevices;
+
QSocketNotifier *mReadNotifier;
- QSocketNotifier *mWriteNotifier;
- EGLDisplay mEglDisplay;
- struct wl_egl_display *mNativeEglDisplay;
+ int mFd;
+ bool mScreensInitialized;
+ uint32_t mSocketMask;
+
+ static const struct wl_output_listener outputListener;
+ static int sourceUpdate(uint32_t mask, void *data);
static void displayHandleGlobal(struct wl_display *display,
uint32_t id,
const char *interface,
uint32_t version, void *data);
-
static void outputHandleGeometry(void *data,
struct wl_output *output,
int32_t x, int32_t y,
int32_t width, int32_t height);
+#ifdef QT_WAYLAND_GL_SUPPORT
+ QWaylandGLIntegration *mEglIntegration;
+#endif
+
static void shellHandleConfigure(void *data, struct wl_shell *shell,
uint32_t time, uint32_t edges,
struct wl_surface *surface,
int32_t width, int32_t height);
- static int sourceUpdate(uint32_t mask, void *data);
-
- static const struct wl_output_listener outputListener;
static const struct wl_shell_listener shellListener;
};