diff options
Diffstat (limited to 'src/plugins/platforms/qwayland-xcomposite-egl')
6 files changed, 22 insertions, 42 deletions
diff --git a/src/plugins/platforms/qwayland-xcomposite-egl/qwayland-xcomposite-egl.pro b/src/plugins/platforms/qwayland-xcomposite-egl/qwayland-xcomposite-egl.pro index b691ec9dc..e41cf59b4 100644 --- a/src/plugins/platforms/qwayland-xcomposite-egl/qwayland-xcomposite-egl.pro +++ b/src/plugins/platforms/qwayland-xcomposite-egl/qwayland-xcomposite-egl.pro @@ -6,6 +6,10 @@ include (../xcomposite_share/xcomposite_share.pri) OTHER_FILES += qwayland-xcomposite-egl.json +contains(DEFINES, QT_WAYLAND_WINDOWMANAGER_SUPPORT) { + WAYLANDCLIENTSOURCES += ../../../extensions/windowmanager.xml +} + !contains(QT_CONFIG, no-pkg-config) { CONFIG += link_pkgconfig PKGCONFIG += xcomposite egl x11 diff --git a/src/plugins/platforms/qwayland-xcomposite-egl/qwaylandxcompositeeglcontext.cpp b/src/plugins/platforms/qwayland-xcomposite-egl/qwaylandxcompositeeglcontext.cpp index 42139ef18..635e47c06 100644 --- a/src/plugins/platforms/qwayland-xcomposite-egl/qwaylandxcompositeeglcontext.cpp +++ b/src/plugins/platforms/qwayland-xcomposite-egl/qwaylandxcompositeeglcontext.cpp @@ -51,7 +51,7 @@ QT_USE_NAMESPACE QWaylandXCompositeEGLContext::QWaylandXCompositeEGLContext(const QSurfaceFormat &format, QPlatformOpenGLContext *share, EGLDisplay display) - : QEGLPlatformContext(format, share, display) + : QEGLPlatformContext(format, share, display, q_configFromGLFormat(display, format, true, EGL_WINDOW_BIT | EGL_PIXMAP_BIT), EGL_OPENGL_ES_API) { } diff --git a/src/plugins/platforms/qwayland-xcomposite-egl/qwaylandxcompositeeglintegration.cpp b/src/plugins/platforms/qwayland-xcomposite-egl/qwaylandxcompositeeglintegration.cpp index 992c2dcff..c2ea9a934 100644 --- a/src/plugins/platforms/qwayland-xcomposite-egl/qwaylandxcompositeeglintegration.cpp +++ b/src/plugins/platforms/qwayland-xcomposite-egl/qwaylandxcompositeeglintegration.cpp @@ -105,27 +105,27 @@ QWaylandDisplay * QWaylandXCompositeEGLIntegration::waylandDisplay() const { return mWaylandDisplay; } -wl_xcomposite * QWaylandXCompositeEGLIntegration::waylandXComposite() const +qt_xcomposite * QWaylandXCompositeEGLIntegration::waylandXComposite() const { return mWaylandComposite; } -const struct wl_xcomposite_listener QWaylandXCompositeEGLIntegration::xcomposite_listener = { +const struct qt_xcomposite_listener QWaylandXCompositeEGLIntegration::xcomposite_listener = { QWaylandXCompositeEGLIntegration::rootInformation }; -void QWaylandXCompositeEGLIntegration::wlDisplayHandleGlobal(void *data, wl_registry *registry, uint32_t id, const char *interface, uint32_t version) +void QWaylandXCompositeEGLIntegration::wlDisplayHandleGlobal(void *data, wl_registry *registry, uint32_t id, const QString &interface, uint32_t version) { Q_UNUSED(version); - if (strcmp(interface, "wl_xcomposite") == 0) { + if (interface == "wl_xcomposite") { QWaylandXCompositeEGLIntegration *integration = static_cast<QWaylandXCompositeEGLIntegration *>(data); - integration->mWaylandComposite = static_cast<struct wl_xcomposite *>(wl_registry_bind(registry,id,&wl_xcomposite_interface,1)); - wl_xcomposite_add_listener(integration->mWaylandComposite,&xcomposite_listener,integration); + integration->mWaylandComposite = static_cast<struct qt_xcomposite *>(wl_registry_bind(registry,id,&qt_xcomposite_interface,1)); + qt_xcomposite_add_listener(integration->mWaylandComposite,&xcomposite_listener,integration); } } -void QWaylandXCompositeEGLIntegration::rootInformation(void *data, wl_xcomposite *xcomposite, const char *display_name, uint32_t root_window) +void QWaylandXCompositeEGLIntegration::rootInformation(void *data, qt_xcomposite *xcomposite, const char *display_name, uint32_t root_window) { Q_UNUSED(xcomposite); QWaylandXCompositeEGLIntegration *integration = static_cast<QWaylandXCompositeEGLIntegration *>(data); diff --git a/src/plugins/platforms/qwayland-xcomposite-egl/qwaylandxcompositeeglintegration.h b/src/plugins/platforms/qwayland-xcomposite-egl/qwaylandxcompositeeglintegration.h index d3015ab57..d7d1d4912 100644 --- a/src/plugins/platforms/qwayland-xcomposite-egl/qwaylandxcompositeeglintegration.h +++ b/src/plugins/platforms/qwayland-xcomposite-egl/qwaylandxcompositeeglintegration.h @@ -75,16 +75,18 @@ public: QPlatformOpenGLContext *createPlatformOpenGLContext(const QSurfaceFormat &glFormat, QPlatformOpenGLContext *share) const; QWaylandDisplay *waylandDisplay() const; - struct wl_xcomposite *waylandXComposite() const; + struct qt_xcomposite *waylandXComposite() const; Display *xDisplay() const; EGLDisplay eglDisplay() const; int screen() const; Window rootWindow() const; + bool supportsThreadedOpenGL() const { return true; } + private: QWaylandDisplay *mWaylandDisplay; - struct wl_xcomposite *mWaylandComposite; + struct qt_xcomposite *mWaylandComposite; Display *mDisplay; EGLDisplay mEglDisplay; @@ -92,11 +94,11 @@ private: Window mRootWindow; static void wlDisplayHandleGlobal(void *data, struct wl_registry *registry, uint32_t id, - const char *interface, uint32_t version); + const QString &interface, uint32_t version); - static const struct wl_xcomposite_listener xcomposite_listener; + static const struct qt_xcomposite_listener xcomposite_listener; static void rootInformation(void *data, - struct wl_xcomposite *xcomposite, + struct qt_xcomposite *xcomposite, const char *display_name, uint32_t root_window); }; diff --git a/src/plugins/platforms/qwayland-xcomposite-egl/qwaylandxcompositeeglwindow.cpp b/src/plugins/platforms/qwayland-xcomposite-egl/qwaylandxcompositeeglwindow.cpp index d47439412..f1768991f 100644 --- a/src/plugins/platforms/qwayland-xcomposite-egl/qwaylandxcompositeeglwindow.cpp +++ b/src/plugins/platforms/qwayland-xcomposite-egl/qwaylandxcompositeeglwindow.cpp @@ -49,7 +49,10 @@ #include <X11/extensions/Xcomposite.h> #include "qwaylandxcompositeeglintegration.h" + +#ifdef QT_WAYLAND_WINDOWMANAGER_SUPPORT #include "windowmanager_integration/qwaylandwindowmanagerintegration.h" +#endif #include <QtCore/QDebug> @@ -63,7 +66,6 @@ QWaylandXCompositeEGLWindow::QWaylandXCompositeEGLWindow(QWindow *window, QWayla , m_xWindow(0) , m_config(q_configFromGLFormat(glxIntegration->eglDisplay(), window->format(), true, EGL_WINDOW_BIT | EGL_PIXMAP_BIT)) , m_surface(0) - , m_waitingForSync(false) { } @@ -134,14 +136,6 @@ void QWaylandXCompositeEGLWindow::createEglSurface() (uint32_t)m_xWindow, size); attach(m_buffer, 0, 0); - - m_waitingForSync = true; - struct wl_callback *callback = wl_display_sync(m_glxIntegration->waylandDisplay()->wl_display()); - wl_callback_add_listener(callback,&m_callback_listener,&m_waitingForSync); - - m_glxIntegration->waylandDisplay()->flushRequests(); - while (m_waitingForSync) - m_glxIntegration->waylandDisplay()->blockingReadEvents(); } void QWaylandXCompositeEGLWindow::requestActivateWindow() @@ -152,17 +146,3 @@ void QWaylandXCompositeEGLWindow::requestActivateWindow() QWaylandWindow::requestActivateWindow(); } - -const struct wl_callback_listener QWaylandXCompositeEGLWindow::m_callback_listener = { - QWaylandXCompositeEGLWindow::done -}; - -void QWaylandXCompositeEGLWindow::done(void *data, - struct wl_callback *callback, - uint32_t time) -{ - Q_UNUSED(time); - bool *waitingForSync = static_cast<bool *>(data); - *waitingForSync=false; - wl_callback_destroy(callback); -} diff --git a/src/plugins/platforms/qwayland-xcomposite-egl/qwaylandxcompositeeglwindow.h b/src/plugins/platforms/qwayland-xcomposite-egl/qwaylandxcompositeeglwindow.h index 895ac28f0..98f0ed736 100644 --- a/src/plugins/platforms/qwayland-xcomposite-egl/qwaylandxcompositeeglwindow.h +++ b/src/plugins/platforms/qwayland-xcomposite-egl/qwaylandxcompositeeglwindow.h @@ -71,12 +71,6 @@ private: Window m_xWindow; EGLConfig m_config; EGLSurface m_surface; - - bool m_waitingForSync; - static const struct wl_callback_listener m_callback_listener; - static void done(void *data, - struct wl_callback *wl_callback, - uint32_t time); }; QT_END_NAMESPACE |