diff --git a/plugins/qpa/integration.cpp b/plugins/qpa/integration.cpp index c48b471e7..66d7e4b31 100644 --- a/plugins/qpa/integration.cpp +++ b/plugins/qpa/integration.cpp @@ -154,9 +154,13 @@ QPlatformWindow *Integration::createPlatformWindow(QWindow *window) const if (!s || !c) { return new QPlatformWindow(window); } else { - // don't set window as parent, cause infinite recursion in PlasmaQuick::Dialog - auto surface = c->createSurface(c); - return new Window(window, surface, s->createSurface(surface, surface), this); + if (window->surfaceClass() == QSurface::Window) { + // don't set window as parent, cause infinite recursion in PlasmaQuick::Dialog + auto surface = c->createSurface(c); + return new Window(window, surface, s->createSurface(surface, surface), this); + } else { + return new Window(window, this); + } } } diff --git a/plugins/qpa/window.cpp b/plugins/qpa/window.cpp index 8b0717321..dcc792fa7 100644 --- a/plugins/qpa/window.cpp +++ b/plugins/qpa/window.cpp @@ -53,6 +53,16 @@ Window::Window(QWindow *window, KWayland::Client::Surface *surface, KWayland::Cl waylandServer()->internalClientConection()->flush(); } +Window::Window(QWindow *window, const Integration *integration) + : QPlatformWindow(window) + , m_surface(nullptr) + , m_shellSurface(nullptr) + , m_windowId(++s_windowId) + , m_integration(integration) + , m_scale(screens()->maxScale()) +{ +} + Window::~Window() { unmap(); @@ -126,7 +136,9 @@ QSharedPointer Window::swapFBO() { auto fbo = m_contentFBO; m_contentFBO.clear(); - m_surface->commit(KWayland::Client::Surface::CommitFlag::None); + if (m_surface) { + m_surface->commit(KWayland::Client::Surface::CommitFlag::None); + } return fbo; } diff --git a/plugins/qpa/window.h b/plugins/qpa/window.h index f43019535..a7c0ceb00 100644 --- a/plugins/qpa/window.h +++ b/plugins/qpa/window.h @@ -52,6 +52,8 @@ class Window : public QPlatformWindow { public: explicit Window(QWindow *window, KWayland::Client::Surface *surface, KWayland::Client::ShellSurface *shellSurface, const Integration *integration); + explicit Window(QWindow *window, const Integration *integration); + virtual ~Window(); void setVisible(bool visible) override;