diff --git a/plugins/platforms/x11/windowed/x11windowed_backend.cpp b/plugins/platforms/x11/windowed/x11windowed_backend.cpp --- a/plugins/platforms/x11/windowed/x11windowed_backend.cpp +++ b/plugins/platforms/x11/windowed/x11windowed_backend.cpp @@ -54,6 +54,7 @@ { setSupportsPointerWarping(true); connect(this, &X11WindowedBackend::sizeChanged, this, &X11WindowedBackend::screenSizeChanged); + handleOutputs(); } X11WindowedBackend::~X11WindowedBackend() @@ -153,9 +154,7 @@ int logicalWidthSum = 0; for (int i = 0; i < initialOutputCount(); ++i) { auto *output = new X11WindowedOutput(this); - output->setScale(initialOutputScale()); - output->setGeometry(QPoint(logicalWidthSum, 0), QSize(pixelWidth, pixelHeight)); - output->init(); + output->init(QPoint(logicalWidthSum, 0), QSize(pixelWidth, pixelHeight)); m_protocols = protocolsAtom; m_deleteWindowProtocol = deleteWindowAtom; diff --git a/plugins/platforms/x11/windowed/x11windowed_output.h b/plugins/platforms/x11/windowed/x11windowed_output.h --- a/plugins/platforms/x11/windowed/x11windowed_output.h +++ b/plugins/platforms/x11/windowed/x11windowed_output.h @@ -45,7 +45,7 @@ explicit X11WindowedOutput(X11WindowedBackend *backend); ~X11WindowedOutput() override; - void init(); + void init(const QPoint &logicalPosition, const QSize &pixelSize); xcb_window_t window() const { return m_window; diff --git a/plugins/platforms/x11/windowed/x11windowed_output.cpp b/plugins/platforms/x11/windowed/x11windowed_output.cpp --- a/plugins/platforms/x11/windowed/x11windowed_output.cpp +++ b/plugins/platforms/x11/windowed/x11windowed_output.cpp @@ -47,8 +47,20 @@ xcb_flush(m_backend->connection()); } -void X11WindowedOutput::init() +void X11WindowedOutput::init(const QPoint &logicalPosition, const QSize &pixelSize) { + KWayland::Server::OutputDeviceInterface::Mode mode; + mode.id = 0; + mode.size = pixelSize; + mode.flags = KWayland::Server::OutputDeviceInterface::ModeFlag::Current; + mode.refreshRate = 60000; // TODO: get refresh rate via randr + AbstractWaylandOutput::initWaylandOutputDevice("model_TODO", "manufacturer_TODO", + "UUID_TODO", { mode }); + + setEnabled(true); + setGeometry(logicalPosition, pixelSize); + setScale(m_backend->initialOutputScale()); + uint32_t mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK; const uint32_t values[] = { m_backend->screen()->black_pixel, @@ -67,7 +79,7 @@ m_window, m_backend->screen()->root, 0, 0, - pixelSize().width(), pixelSize().height(), + pixelSize.width(), pixelSize.height(), 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, XCB_COPY_FROM_PARENT, mask, values);