diff --git a/autotests/client/test_xdg_output.cpp b/autotests/client/test_xdg_output.cpp --- a/autotests/client/test_xdg_output.cpp +++ b/autotests/client/test_xdg_output.cpp @@ -63,7 +63,7 @@ m_serverOutput->setCurrentMode(QSize(1920, 1080)); m_serverOutput->create(); - m_serverXdgOutputManager = m_display->createXdgOutputManager(this); + m_serverXdgOutputManager = m_display->createXdgOutputManager(XdgOutputInterfaceVersion::UnstableV2, this); m_serverXdgOutputManager->create(); m_serverXdgOutput = m_serverXdgOutputManager->createXdgOutput(m_serverOutput, this); m_serverXdgOutput->setLogicalSize(QSize(1280, 720)); //a 1.5 scale factor diff --git a/src/client/xdgoutput.h b/src/client/xdgoutput.h --- a/src/client/xdgoutput.h +++ b/src/client/xdgoutput.h @@ -197,13 +197,13 @@ /** * A consistent unique name for this monitor - * @since 5.XDGOUTPUT + * @since 5.69 */ QString name() const; /** * A longer human readable description - * @since 5.XDGOUTPUT + * @since 5.69 */ QString description() const; diff --git a/src/server/display.h b/src/server/display.h --- a/src/server/display.h +++ b/src/server/display.h @@ -80,6 +80,7 @@ class KeyStateInterface; class LinuxDmabufUnstableV1Interface; class TabletManagerInterface; +enum class XdgOutputInterfaceVersion; /** * @brief Class holding the Wayland server display loop. @@ -282,10 +283,19 @@ * * @return the created manager * @since 5.47 + * @deprecated use the version that takes a version */ XdgOutputManagerInterface *createXdgOutputManager(QObject *parent = nullptr); + /** + * Creates the XdgOutputManagerInterface + * + * @return the created manager + * @since 5.69 + */ + XdgOutputManagerInterface *createXdgOutputManager(const XdgOutputInterfaceVersion &version, QObject *parent = nullptr); + /** * Creates the PlasmaVirtualDesktopManagementInterface in interface @p version. * diff --git a/src/server/display.cpp b/src/server/display.cpp --- a/src/server/display.cpp +++ b/src/server/display.cpp @@ -498,7 +498,12 @@ XdgOutputManagerInterface *Display::createXdgOutputManager(QObject *parent) { - auto b = new XdgOutputManagerInterface(this, parent); + return createXdgOutputManager(XdgOutputInterfaceVersion::UnstableV1, parent); +} + +XdgOutputManagerInterface *Display::createXdgOutputManager(const XdgOutputInterfaceVersion &version, QObject *parent) +{ + auto b = new XdgOutputManagerInterface(version, this, parent); connect(this, &Display::aboutToTerminate, b, [this, b] { delete b; }); return b; } diff --git a/src/server/xdgoutput_interface.h b/src/server/xdgoutput_interface.h --- a/src/server/xdgoutput_interface.h +++ b/src/server/xdgoutput_interface.h @@ -28,6 +28,16 @@ class OutputInterface; class XdgOutputInterface; +/** + * Enum describing the different InterfaceVersion encapsulated in this implementation. + * @since 5.69 + */ +enum class XdgOutputInterfaceVersion +{ + UnstableV1 = 1, + UnstableV2 = 2 +}; + /** * Global manager for XdgOutputs * @since 5.47 @@ -46,6 +56,7 @@ */ XdgOutputInterface* createXdgOutput(OutputInterface *output, QObject *parent); private: + explicit XdgOutputManagerInterface(XdgOutputInterfaceVersion version, Display *display, QObject *parent = nullptr); explicit XdgOutputManagerInterface(Display *display, QObject *parent = nullptr); friend class Display; class Private; @@ -91,25 +102,27 @@ * @brief Sets a short name of the output * This should be consistent across reboots for the same monitor * It should be set once before the first done call - * @since 5.XDGOUTPUT + * Only effective since UnstableV2 + * @since 5.69 */ void setName(const QString &name); /** * The last set name - * @since 5.XDGOUTPUT + * @since 5.69 */ void name() const; /** * @brief Sets a longer description of the output * This should be consistent across reboots for the same monitor * It should be set once before the first done call - * @since 5.XDGOUTPUT + * @since 5.69 + * Only effective since UnstableV2 */ void setDescription(const QString &description); /** * The last set description - * @since 5.XDGOUTPUT + * @since 5.69 */ void description() const; diff --git a/src/server/xdgoutput_interface.cpp b/src/server/xdgoutput_interface.cpp --- a/src/server/xdgoutput_interface.cpp +++ b/src/server/xdgoutput_interface.cpp @@ -21,7 +21,7 @@ class XdgOutputManagerInterface::Private : public Global::Private { public: - Private(XdgOutputManagerInterface *q, Display *d); + Private(XdgOutputManagerInterface *q, Display *d, int version); QHash outputs; private: @@ -37,11 +37,8 @@ XdgOutputManagerInterface *q; static const struct zxdg_output_manager_v1_interface s_interface; - static const quint32 s_version; }; -const quint32 XdgOutputManagerInterface::Private::s_version = 2; - #ifndef K_DOXYGEN const struct zxdg_output_manager_v1_interface XdgOutputManagerInterface::Private::s_interface = { destroyCallback, @@ -78,8 +75,13 @@ }; +XdgOutputManagerInterface::XdgOutputManagerInterface(XdgOutputInterfaceVersion version, Display *display, QObject *parent) + : Global(new XdgOutputManagerInterface::Private(this, display, static_cast(version)), parent) +{ +} + XdgOutputManagerInterface::XdgOutputManagerInterface(Display *display, QObject *parent) - : Global(new XdgOutputManagerInterface::Private(this, display), parent) + :XdgOutputManagerInterface::XdgOutputManagerInterface(XdgOutputInterfaceVersion::UnstableV1, display, parent) { } @@ -143,16 +145,16 @@ }); } -XdgOutputManagerInterface::Private::Private(XdgOutputManagerInterface *qptr, Display *d) - : Global::Private(d, &zxdg_output_manager_v1_interface, s_version) +XdgOutputManagerInterface::Private::Private(XdgOutputManagerInterface *qptr, Display *d, int version) + : Global::Private(d, &zxdg_output_manager_v1_interface, version) , q(qptr) { } void XdgOutputManagerInterface::Private::bind(wl_client *client, uint32_t version, uint32_t id) { auto c = display->getConnection(client); - wl_resource *resource = c->createResource(&zxdg_output_manager_v1_interface, qMin(version, s_version), id); + wl_resource *resource = c->createResource(&zxdg_output_manager_v1_interface, qMin(version, m_version), id); if (!resource) { wl_client_post_no_memory(client); return; @@ -234,12 +236,8 @@ { resource->setLogicalPosition(pos); resource->setLogicalSize(size); - if (!name.isEmpty()) { - resource->setName(name); - } - if (!description.isEmpty()) { - resource->setDescription(description); - } + resource->setName(name); + resource->setDescription(description); if (doneOnce) { resource->done(); }