diff options
author | Laszlo Agocs <laszlo.agocs@digia.com> | 2014-08-23 15:12:24 +0200 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@digia.com> | 2014-08-25 14:06:38 +0200 |
commit | 3a65f72f1df0a8b9ebbf568a714925be57c5da73 (patch) | |
tree | 0b1c3d196ae12fceead531a8ab51074011b45e39 | |
parent | b743fc7a1e6ee680ca89ae17fb6b521178fd09a9 (diff) |
Indicate from the client buffer integration if decorations are supported
Custom client buffer integrations may not care about window decorations.
Setting QT_WAYLAND_DISABLE_WINDOWDECORATION is tedious and error-prone.
And it cannot be omitted since things like input events will be off if the
common client code thinks decorations are in use but the client buffer
integration does not render them at all.
Therefore add a supportsWindowDecoration() virtual in addition to the
environment variable.
Change-Id: If8f621182d5c230f4d8d679c050f5d27aed6c2fb
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
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)); |