diff options
5 files changed, 16 insertions, 1 deletions
diff --git a/src/client/hardwareintegration/qwaylandclientbufferintegration_p.h b/src/client/hardwareintegration/qwaylandclientbufferintegration_p.h index be594984b..bbe42eb26 100644 --- a/src/client/hardwareintegration/qwaylandclientbufferintegration_p.h +++ b/src/client/hardwareintegration/qwaylandclientbufferintegration_p.h @@ -65,6 +65,7 @@ public: virtual bool isValid() const { return true; } virtual bool supportsThreadedOpenGL() const { return false; } + virtual bool supportsWindowDecoration() const { return false; } virtual QWaylandWindow *createEglWindow(QWindow *window) = 0; virtual QPlatformOpenGLContext *createPlatformOpenGLContext(const QSurfaceFormat &glFormat, QPlatformOpenGLContext *share) const = 0; diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp index 8679463ec..fb3095d4b 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -52,6 +52,7 @@ #include "qwaylanddecoration_p.h" #include "qwaylandwindowmanagerintegration_p.h" #include "qwaylandnativeinterface_p.h" +#include "qwaylandclientbufferintegration_p.h" #include <QtCore/QFileInfo> #include <QtCore/QPointer> @@ -482,7 +483,9 @@ bool QWaylandWindow::createDecoration() } } - static bool disableWaylandDecorations = !qgetenv("QT_WAYLAND_DISABLE_WINDOWDECORATION").isEmpty(); + static bool disableWaylandDecorations = !qgetenv("QT_WAYLAND_DISABLE_WINDOWDECORATION").isEmpty() + || (mDisplay->clientBufferIntegration() && !mDisplay->clientBufferIntegration()->supportsWindowDecoration()); + if (disableWaylandDecorations) return false; diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.cpp b/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.cpp index b0edc175c..89ccd9390 100644 --- a/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.cpp +++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.cpp @@ -114,6 +114,11 @@ bool QWaylandEglClientBufferIntegration::supportsThreadedOpenGL() const return m_supportsThreading; } +bool QWaylandEglClientBufferIntegration::supportsWindowDecoration() const +{ + return true; +} + QWaylandWindow *QWaylandEglClientBufferIntegration::createEglWindow(QWindow *window) { return new QWaylandEglWindow(window); diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.h b/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.h index 7f2e28b88..9d3d15094 100644 --- a/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.h +++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.h @@ -60,6 +60,7 @@ public: void initialize(QWaylandDisplay *display) Q_DECL_OVERRIDE; bool isValid() const Q_DECL_OVERRIDE; bool supportsThreadedOpenGL() const Q_DECL_OVERRIDE; + bool supportsWindowDecoration() const Q_DECL_OVERRIDE; QWaylandWindow *createEglWindow(QWindow *window) Q_DECL_OVERRIDE; QPlatformOpenGLContext *createPlatformOpenGLContext(const QSurfaceFormat &glFormat, QPlatformOpenGLContext *share) const Q_DECL_OVERRIDE; diff --git a/tests/auto/client/tst_client.cpp b/tests/auto/client/tst_client.cpp index e13d738dc..113f9d9a8 100644 --- a/tests/auto/client/tst_client.cpp +++ b/tests/auto/client/tst_client.cpp @@ -248,6 +248,11 @@ int main(int argc, char **argv) setenv("XDG_RUNTIME_DIR", ".", 1); setenv("QT_QPA_PLATFORM", "wayland", 1); // force QGuiApplication to use wayland plugin + // wayland-egl hangs in the test setup when we try to initialize. Until it gets + // figured out, avoid clientBufferIntegration() from being called in + // QWaylandWindow::createDecorations(). + setenv("QT_WAYLAND_DISABLE_WINDOWDECORATION", "1", 1); + MockCompositor compositor; compositor.setOutputGeometry(QRect(QPoint(), screenSize)); |