summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/client/hardwareintegration/qwaylandclientbufferintegration_p.h1
-rw-r--r--src/client/qwaylandwindow.cpp5
-rw-r--r--src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.cpp5
-rw-r--r--src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.h1
-rw-r--r--tests/auto/client/tst_client.cpp5
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));