diff --git a/abstract_output.h b/abstract_output.h --- a/abstract_output.h +++ b/abstract_output.h @@ -104,7 +104,7 @@ ~AbstractOutput() override; /** - * Returns the human readable name of this output. + * Returns a short identifiable name of this output. */ virtual QString name() const = 0; diff --git a/abstract_wayland_output.h b/abstract_wayland_output.h --- a/abstract_wayland_output.h +++ b/abstract_wayland_output.h @@ -124,6 +124,8 @@ */ void setEnabled(bool enable) override; + QString description() const; + Q_SIGNALS: void modeChanged(); @@ -137,6 +139,9 @@ bool internal() const { return m_internal; } + void setName(const QString &name) { + m_name = name; + } void setInternal(bool set) { m_internal = set; } @@ -170,6 +175,7 @@ KWayland::Server::OutputDeviceInterface *m_waylandOutputDevice; KWayland::Server::OutputInterface::DpmsMode m_dpms = KWayland::Server::OutputInterface::DpmsMode::On; + QString m_name; bool m_internal = false; }; diff --git a/abstract_wayland_output.cpp b/abstract_wayland_output.cpp --- a/abstract_wayland_output.cpp +++ b/abstract_wayland_output.cpp @@ -54,8 +54,7 @@ QString AbstractWaylandOutput::name() const { - return QStringLiteral("%1 %2").arg(m_waylandOutputDevice->manufacturer()).arg( - m_waylandOutputDevice->model()); + return m_name; } QByteArray AbstractWaylandOutput::uuid() const @@ -234,6 +233,12 @@ } } +QString AbstractWaylandOutput::description() const +{ + return QStringLiteral("%1 %2").arg(m_waylandOutputDevice->manufacturer()).arg( + m_waylandOutputDevice->model()); +} + void AbstractWaylandOutput::setWaylandMode(const QSize &size, int refreshRate) { m_waylandOutput->setCurrentMode(size, refreshRate); @@ -277,6 +282,8 @@ // start off enabled m_waylandOutput->create(); + m_xdgOutput->setName(name()); + m_xdgOutput->setDescription(description()); m_xdgOutput->setLogicalSize(pixelSize() / scale()); m_xdgOutput->done(); } diff --git a/autotests/integration/screen_changes_test.cpp b/autotests/integration/screen_changes_test.cpp --- a/autotests/integration/screen_changes_test.cpp +++ b/autotests/integration/screen_changes_test.cpp @@ -155,6 +155,10 @@ QCOMPARE(xdgO2->logicalPosition(), geometries.at(1).topLeft()); QCOMPARE(xdgO2->logicalSize(), geometries.at(1).size()); + QVERIFY(xdgO1->name().startsWith("Virtual-")); + QVERIFY(xdgO1->name() != xdgO2->name()); + QVERIFY(!xdgO1->description().isEmpty()); + // now let's try to remove one output again outputAnnouncedSpy.clear(); outputRemovedSpy.clear(); diff --git a/plugins/platforms/drm/drm_output.cpp b/plugins/platforms/drm/drm_output.cpp --- a/plugins/platforms/drm/drm_output.cpp +++ b/plugins/platforms/drm/drm_output.cpp @@ -299,7 +299,7 @@ manufacturer = QString::fromLatin1(m_edid.eisaId()); } - QString connectorName = s_connectorNames.value(connector->connector_type, QByteArrayLiteral("Unknown")); + QString connectorName = s_connectorNames.value(connector->connector_type, QByteArrayLiteral("Unknown")) + QStringLiteral("-") + QString::number(connector->connector_type_id); QString modelName; if (!m_edid.monitorName().isEmpty()) { @@ -315,7 +315,7 @@ modelName = i18n("unknown"); } - const QString model = connectorName + QStringLiteral("-") + QString::number(connector->connector_type_id) + QStringLiteral("-") + modelName; + const QString model = connectorName + QStringLiteral("-") + modelName; // read in mode information QVector modes; @@ -351,7 +351,7 @@ qCWarning(KWIN_DRM) << "Overwriting monitor physical size for" << m_edid.eisaId() << "/" << m_edid.monitorName() << "/" << m_edid.serialNumber() << " from " << physicalSize << "to " << overwriteSize; physicalSize = overwriteSize; } - + setName(connectorName); initInterfaces(model, manufacturer, m_uuid, physicalSize, modes); } diff --git a/plugins/platforms/fbdev/fb_backend.h b/plugins/platforms/fbdev/fb_backend.h --- a/plugins/platforms/fbdev/fb_backend.h +++ b/plugins/platforms/fbdev/fb_backend.h @@ -34,7 +34,7 @@ Q_OBJECT public: - FramebufferOutput(QObject *parent = nullptr) : AbstractWaylandOutput(parent) {} + FramebufferOutput(QObject *parent = nullptr); ~FramebufferOutput() override = default; void init(const QSize &pixelSize, const QSize &physicalSize); diff --git a/plugins/platforms/fbdev/fb_backend.cpp b/plugins/platforms/fbdev/fb_backend.cpp --- a/plugins/platforms/fbdev/fb_backend.cpp +++ b/plugins/platforms/fbdev/fb_backend.cpp @@ -37,6 +37,12 @@ namespace KWin { +FramebufferOutput::FramebufferOutput(QObject *parent): + AbstractWaylandOutput(parent) +{ + setName("FB-0"); +} + void FramebufferOutput::init(const QSize &pixelSize, const QSize &physicalSize) { KWayland::Server::OutputDeviceInterface::Mode mode; diff --git a/plugins/platforms/virtual/virtual_output.cpp b/plugins/platforms/virtual/virtual_output.cpp --- a/plugins/platforms/virtual/virtual_output.cpp +++ b/plugins/platforms/virtual/virtual_output.cpp @@ -26,6 +26,9 @@ : AbstractWaylandOutput() { Q_UNUSED(parent); + static int identifier = -1; + identifier++; + setName("Virtual-" + QString::number(identifier)); } VirtualOutput::~VirtualOutput() diff --git a/plugins/platforms/wayland/wayland_output.cpp b/plugins/platforms/wayland/wayland_output.cpp --- a/plugins/platforms/wayland/wayland_output.cpp +++ b/plugins/platforms/wayland/wayland_output.cpp @@ -41,6 +41,10 @@ , m_surface(surface) , m_backend(backend) { + static int identifier = -1; + identifier++; + setName("WL-" + QString::number(identifier)); + connect(surface, &Surface::frameRendered, [this] { m_rendered = true; emit frameRendered(); 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 @@ -37,6 +37,10 @@ , m_backend(backend) { m_window = xcb_generate_id(m_backend->connection()); + + static int identifier = -1; + identifier++; + setName("X11-" + QString::number(identifier)); } X11WindowedOutput::~X11WindowedOutput()