diff options
3 files changed, 11 insertions, 1 deletions
diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp index 306f08507..fc7aca384 100644 --- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp +++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp @@ -64,7 +64,7 @@ QWaylandEglWindow::QWaylandEglWindow(QWindow *window) , m_resize(false) , m_format(q_glFormatFromConfig(m_clientBufferIntegration->eglDisplay(), m_eglConfig)) { - setGeometry(window->geometry()); + create(); } QWaylandEglWindow::~QWaylandEglWindow() @@ -87,9 +87,14 @@ QWaylandWindow::WindowType QWaylandEglWindow::windowType() const void QWaylandEglWindow::setGeometry(const QRect &rect) { QWaylandWindow::setGeometry(rect); + create(); +} +void QWaylandEglWindow::create() +{ createDecoration(); QMargins margins = frameMargins(); + QRect rect = geometry(); QSize sizeWithMargins = rect.size() + QSize(margins.left() + margins.right(), margins.top() + margins.bottom()); // wl_egl_windows must have both width and height > 0 diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h index d8fdbcfce..6c6c77e09 100644 --- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h +++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h @@ -58,6 +58,7 @@ public: ~QWaylandEglWindow(); WindowType windowType() const; + void create(); virtual void setGeometry(const QRect &rect); QRect contentsRect() const; diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp b/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp index e7a4b5a2b..04cfbe6b5 100644 --- a/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp +++ b/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp @@ -113,6 +113,10 @@ bool QWaylandGLContext::makeCurrent(QPlatformSurface *surface) window->setCanResize(false); EGLSurface eglSurface = window->eglSurface(); + if (!eglSurface) { + window->create(); + eglSurface = window->eglSurface(); + } if (!eglMakeCurrent(m_eglDisplay, eglSurface, eglSurface, m_context)) { qWarning("QEGLPlatformContext::makeCurrent: eglError: %x, this: %p \n", eglGetError(), this); return false; |