diff --git a/plugins/qpa/integration.cpp b/plugins/qpa/integration.cpp index 9cb4482959..a450b9c32b 100644 --- a/plugins/qpa/integration.cpp +++ b/plugins/qpa/integration.cpp @@ -88,6 +88,8 @@ void Integration::initialize() // TODO: start initialize Wayland once the internal Wayland connection is created connect(kwinApp(), &Application::screensCreated, this, &Integration::initializeWayland, Qt::QueuedConnection); QPlatformIntegration::initialize(); + m_dummyScreen = new Screen(nullptr); + screenAdded(m_dummyScreen); } QAbstractEventDispatcher *Integration::createEventDispatcher() const @@ -178,6 +180,10 @@ void Integration::initializeWayland() void Integration::createWaylandOutput(quint32 name, quint32 version) { + if (m_dummyScreen) { + destroyScreen(m_dummyScreen); + m_dummyScreen = nullptr; + } using namespace KWayland::Client; auto o = m_registry->createOutput(name, version, this); connect(o, &Output::changed, this, diff --git a/plugins/qpa/integration.h b/plugins/qpa/integration.h index 6bf6b22dca..84b5e60daa 100644 --- a/plugins/qpa/integration.h +++ b/plugins/qpa/integration.h @@ -40,6 +40,8 @@ namespace KWin namespace QPA { +class Screen; + class Integration : public QObject, public QPlatformIntegration { Q_OBJECT @@ -74,6 +76,7 @@ private: KWayland::Client::Compositor *m_compositor = nullptr; KWayland::Client::Shell *m_shell = nullptr; EGLDisplay m_eglDisplay = EGL_NO_DISPLAY; + Screen *m_dummyScreen = nullptr; }; } diff --git a/plugins/qpa/screen.cpp b/plugins/qpa/screen.cpp index d083ed0296..f73a1b811e 100644 --- a/plugins/qpa/screen.cpp +++ b/plugins/qpa/screen.cpp @@ -49,12 +49,12 @@ QImage::Format Screen::format() const QRect Screen::geometry() const { - return m_output->geometry(); + return m_output ? m_output->geometry() : QRect(0, 0, 1, 1); } QSizeF Screen::physicalSize() const { - return m_output->physicalSize(); + return m_output ? m_output->physicalSize() : QPlatformScreen::physicalSize(); } QPlatformCursor *Screen::cursor() const