aboutsummaryrefslogtreecommitdiffstats
path: root/community/libkscreen/0001-Implement-Primary-Displays-on-the-Wayland-session.patch
diff options
context:
space:
mode:
Diffstat (limited to 'community/libkscreen/0001-Implement-Primary-Displays-on-the-Wayland-session.patch')
-rw-r--r--community/libkscreen/0001-Implement-Primary-Displays-on-the-Wayland-session.patch432
1 files changed, 0 insertions, 432 deletions
diff --git a/community/libkscreen/0001-Implement-Primary-Displays-on-the-Wayland-session.patch b/community/libkscreen/0001-Implement-Primary-Displays-on-the-Wayland-session.patch
deleted file mode 100644
index a99e89b78fd..00000000000
--- a/community/libkscreen/0001-Implement-Primary-Displays-on-the-Wayland-session.patch
+++ /dev/null
@@ -1,432 +0,0 @@
-From 664aaef4fcbb005b83a8c849a0d80f0dc3ddf689 Mon Sep 17 00:00:00 2001
-From: Aleix Pol <aleixpol@kde.org>
-Date: Wed, 27 Oct 2021 13:07:15 +0200
-Subject: [PATCH 1/2] Add support to primary into the kscreen-doctor tool
-
-As now it's supported on both wayland and X11
----
- src/doctor/doctor.cpp | 33 ++++++++++++++++++++++++++++++++-
- src/doctor/doctor.h | 1 +
- 2 files changed, 33 insertions(+), 1 deletion(-)
-
-diff --git a/src/doctor/doctor.cpp b/src/doctor/doctor.cpp
-index 4bee4ef..dbe442e 100644
---- a/src/doctor/doctor.cpp
-+++ b/src/doctor/doctor.cpp
-@@ -194,7 +194,12 @@ void Doctor::parseOutputArgs()
- return;
- }
- }
-- if (ops.count() == 3 && ops[2] == QLatin1String("enable")) {
-+ if (ops.count() == 3 && ops[2] == QLatin1String("primary")) {
-+ if (!setPrimary(output_id, true)) {
-+ qApp->exit(1);
-+ return;
-+ };
-+ } else if (ops.count() == 3 && ops[2] == QLatin1String("enable")) {
- if (!setEnabled(output_id, true)) {
- qApp->exit(1);
- return;
-@@ -613,6 +618,32 @@ bool Doctor::setRgbRange(int id, KScreen::Output::RgbRange rgbRange)
- return false;
- }
-
-+bool KScreen::Doctor::setPrimary(int id, bool primary)
-+{
-+ if (!m_config) {
-+ qCWarning(KSCREEN_DOCTOR) << "Invalid config.";
-+ return false;
-+ }
-+
-+ bool found = false;
-+ for (const auto &output : m_config->outputs()) {
-+ if (output->id() == id) {
-+ output->setPrimary(true);
-+ m_changed = true;
-+ found = true;
-+ }
-+ }
-+ if (found) {
-+ for (const auto &output : m_config->outputs()) {
-+ if (output->id() != id) {
-+ output->setPrimary(false);
-+ m_changed = true;
-+ }
-+ }
-+ }
-+ return found;
-+}
-+
- void Doctor::applyConfig()
- {
- if (!m_changed) {
-diff --git a/src/doctor/doctor.h b/src/doctor/doctor.h
-index 8a30b24..f6b6592 100644
---- a/src/doctor/doctor.h
-+++ b/src/doctor/doctor.h
-@@ -46,6 +46,7 @@ public:
- bool setOverscan(int id, uint32_t overscan);
- bool setVrrPolicy(int id, KScreen::Output::VrrPolicy policy);
- bool setRgbRange(int id, KScreen::Output::RgbRange rgbRange);
-+ bool setPrimary(int id, bool primary);
-
- Q_SIGNALS:
- void outputsChanged();
---
-GitLab
-
-
-From 665eb0ee049fa47fff38ad231db49ed7b1b63c2e Mon Sep 17 00:00:00 2001
-From: Aleix Pol <aleixpol@kde.org>
-Date: Tue, 26 Oct 2021 17:08:59 +0200
-Subject: [PATCH 2/2] Implement Primary Displays on the wayland session
-
-Adopts the kde_outputmanagement_v2 hooks for it, lets our users specify
-a primary display for a workspace.
----
- backends/kwayland/CMakeLists.txt | 4 +++
- backends/kwayland/waylandconfig.cpp | 36 +++++++++++++------
- backends/kwayland/waylandconfig.h | 6 ++++
- backends/kwayland/waylandoutputdevice.cpp | 29 +++++++++++++--
- backends/kwayland/waylandoutputdevice.h | 10 ++++++
- backends/kwayland/waylandoutputmanagement.cpp | 14 ++++++--
- backends/kwayland/waylandoutputmanagement.h | 16 +++++++++
- 7 files changed, 100 insertions(+), 15 deletions(-)
-
-diff --git a/backends/kwayland/CMakeLists.txt b/backends/kwayland/CMakeLists.txt
-index c00232d..934ddd5 100644
---- a/backends/kwayland/CMakeLists.txt
-+++ b/backends/kwayland/CMakeLists.txt
-@@ -26,6 +26,10 @@ ecm_add_qtwayland_client_protocol(wayland_SRCS
- BASENAME kde-output-management-v2
- )
-
-+ecm_add_qtwayland_client_protocol(wayland_SRCS
-+ PROTOCOL ${PLASMA_WAYLAND_PROTOCOLS_DIR}/kde-primary-output-v1.xml
-+ BASENAME kde-primary-output-v1
-+)
-
- add_library(KSC_KWayland MODULE ${wayland_SRCS})
-
-diff --git a/backends/kwayland/waylandconfig.cpp b/backends/kwayland/waylandconfig.cpp
-index 440c809..654ab74 100644
---- a/backends/kwayland/waylandconfig.cpp
-+++ b/backends/kwayland/waylandconfig.cpp
-@@ -126,6 +126,15 @@ void WaylandConfig::setupRegistry()
- if (interface == WaylandOutputManagement::interface()->name) {
- m_outputManagement = new WaylandOutputManagement(m_registry->registry(), name, version);
- }
-+ if (interface == WaylandPrimaryOutput::interface()->name) {
-+ m_primaryOutput.reset(new WaylandPrimaryOutput(m_registry->registry(), name, version));
-+ connect(m_primaryOutput.data(), &WaylandPrimaryOutput::primaryOutputChanged, this, [this](const QString &name) {
-+ m_primaryOutputName = name;
-+ for (auto output : qAsConst(m_outputMap)) {
-+ output->setPrimary(output->outputName() == name);
-+ }
-+ });
-+ }
- });
-
- connect(m_registry, &KWayland::Client::Registry::interfacesAnnounced, this, [this] {
-@@ -158,6 +167,7 @@ void WaylandConfig::addOutput(quint32 name, quint32 version)
- QObject::disconnect(*connection);
- delete connection;
-
-+ device->setPrimary(m_primaryOutputName == device->outputName());
- m_initializingOutputs.removeOne(device);
- m_outputMap.insert(device->id(), device);
- checkInitialized();
-@@ -224,7 +234,8 @@ KScreen::ConfigPtr WaylandConfig::currentConfig()
- {
- m_kscreenConfig->setScreen(m_screen->toKScreenScreen(m_kscreenConfig));
-
-- const auto features = Config::Feature::Writable | Config::Feature::PerOutputScaling | Config::Feature::AutoRotation | Config::Feature::TabletMode;
-+ const auto features = Config::Feature::Writable | Config::Feature::PerOutputScaling | Config::Feature::AutoRotation | Config::Feature::TabletMode
-+ | Config::Feature::PrimaryDisplay;
- m_kscreenConfig->setSupportedFeatures(features);
- m_kscreenConfig->setValid(m_connection->display());
-
-@@ -239,20 +250,15 @@ KScreen::ConfigPtr WaylandConfig::currentConfig()
- }
- }
-
-- // Add KScreen::Outputs that aren't in the list yet, handle primaryOutput
-+ // Add KScreen::Outputs that aren't in the list yet
- KScreen::OutputList kscreenOutputs = m_kscreenConfig->outputs();
- for (const auto &output : m_outputMap) {
-- KScreen::OutputPtr kscreenOutput = kscreenOutputs[output->id()];
-+ KScreen::OutputPtr &kscreenOutput = kscreenOutputs[output->id()];
- if (!kscreenOutput) {
- kscreenOutput = output->toKScreenOutput();
-- kscreenOutputs.insert(kscreenOutput->id(), kscreenOutput);
-- }
-- if (kscreenOutput && m_outputMap.count() == 1) {
-- kscreenOutput->setPrimary(true);
-- } else if (m_outputMap.count() > 1) {
-- // primaryScreen concept doesn't exist in kwayland, so we don't set one
-+ } else {
-+ output->updateKScreenOutput(kscreenOutput);
- }
-- output->updateKScreenOutput(kscreenOutput);
- }
- m_kscreenConfig->setOutputs(kscreenOutputs);
-
-@@ -276,6 +282,16 @@ void WaylandConfig::tryPendingConfig()
- m_kscreenPendingConfig = nullptr;
- }
-
-+WaylandOutputDevice *WaylandConfig::findOutputDevice(struct ::kde_output_device_v2 *outputdevice) const
-+{
-+ for (WaylandOutputDevice *device : m_outputMap) {
-+ if (device->object() == outputdevice) {
-+ return device;
-+ }
-+ }
-+ return nullptr;
-+}
-+
- void WaylandConfig::applyConfig(const KScreen::ConfigPtr &newConfig)
- {
- using namespace KWayland::Client;
-diff --git a/backends/kwayland/waylandconfig.h b/backends/kwayland/waylandconfig.h
-index a2a6a36..7c50a0a 100644
---- a/backends/kwayland/waylandconfig.h
-+++ b/backends/kwayland/waylandconfig.h
-@@ -15,6 +15,8 @@
- #include <QSize>
- #include <QSocketNotifier>
-
-+struct kde_output_device_v2;
-+
- namespace KWayland
- {
- namespace Client
-@@ -29,6 +31,7 @@ class OutputManagement;
- namespace KScreen
- {
- class Output;
-+class WaylandPrimaryOutput;
- class WaylandOutputDevice;
- class WaylandScreen;
- class WaylandOutputManagement;
-@@ -58,6 +61,7 @@ public:
- QMap<int, WaylandOutputDevice *> outputMap() const;
-
- void applyConfig(const KScreen::ConfigPtr &newConfig);
-+ WaylandOutputDevice *findOutputDevice(struct ::kde_output_device_v2 *outputdevice) const;
-
- bool isReady() const;
-
-@@ -84,9 +88,11 @@ private:
-
- KWayland::Client::Registry *m_registry;
- WaylandOutputManagement *m_outputManagement = nullptr;
-+ QScopedPointer<WaylandPrimaryOutput> m_primaryOutput;
-
- // KWayland names as keys
- QMap<int, WaylandOutputDevice *> m_outputMap;
-+ QString m_primaryOutputName;
-
- // KWayland names
- QList<WaylandOutputDevice *> m_initializingOutputs;
-diff --git a/backends/kwayland/waylandoutputdevice.cpp b/backends/kwayland/waylandoutputdevice.cpp
-index c97e652..40ca260 100644
---- a/backends/kwayland/waylandoutputdevice.cpp
-+++ b/backends/kwayland/waylandoutputdevice.cpp
-@@ -170,7 +170,7 @@ void WaylandOutputDevice::updateKScreenOutput(OutputPtr &output)
- output->setId(m_id);
- output->setEnabled(enabled());
- output->setConnected(true);
-- output->setPrimary(true); // FIXME: wayland doesn't have the concept of a primary display
-+ output->setPrimary(m_isPrimary);
- output->setName(name());
- output->setSizeMm(m_physicalSize);
- output->setPos(m_pos);
-@@ -257,6 +257,11 @@ bool WaylandOutputDevice::setWlConfig(WaylandOutputConfiguration *wlConfig, cons
- changed = true;
- }
-
-+ if (output->isPrimary()) {
-+ wlConfig->set_primary_output(object());
-+ changed = true;
-+ }
-+
- return changed;
- }
-
-@@ -271,12 +276,27 @@ QString WaylandOutputDevice::name() const
- return QStringLiteral("%1 %2").arg(m_manufacturer, m_model);
- }
-
-+QString WaylandOutputDevice::outputName() const
-+{
-+ return m_outputName;
-+}
-+
- QDebug operator<<(QDebug dbg, const WaylandOutputDevice *output)
- {
- dbg << "WaylandOutput(Id:" << output->id() << ", Name:" << QString(output->manufacturer() + QLatin1Char(' ') + output->model()) << ")";
- return dbg;
- }
-
-+bool WaylandOutputDevice::isPrimary() const
-+{
-+ return m_isPrimary;
-+}
-+
-+void WaylandOutputDevice::setPrimary(bool primary)
-+{
-+ m_isPrimary = primary;
-+}
-+
- void WaylandOutputDevice::kde_output_device_v2_done()
- {
- Q_EMIT done();
-@@ -332,6 +352,11 @@ void WaylandOutputDevice::kde_output_device_v2_rgb_range(uint32_t rgb_range)
- m_rgbRange = rgb_range;
- }
-
-+void WaylandOutputDevice::kde_output_device_v2_name(const QString &outputName)
-+{
-+ m_outputName = outputName;
-+}
-+
- QByteArray WaylandOutputDevice::edid() const
- {
- return m_edid;
-@@ -396,5 +421,3 @@ uint32_t WaylandOutputDevice::rgbRange() const
- {
- return m_rgbRange;
- }
--
--#include "waylandoutputdevice.moc"
-diff --git a/backends/kwayland/waylandoutputdevice.h b/backends/kwayland/waylandoutputdevice.h
-index 2d14756..b9dee44 100644
---- a/backends/kwayland/waylandoutputdevice.h
-+++ b/backends/kwayland/waylandoutputdevice.h
-@@ -32,6 +32,7 @@ public:
- bool enabled() const;
- int id() const;
- QString name() const;
-+ QString outputName() const;
- QString model() const;
- QString manufacturer() const;
- qreal scale() const;
-@@ -47,9 +48,15 @@ public:
- void updateKScreenOutput(OutputPtr &output);
- void updateKScreenModes(OutputPtr &output);
-
-+ bool isPrimary() const;
-+ void setPrimary(bool primary);
- bool setWlConfig(WaylandOutputConfiguration *wlConfig, const KScreen::OutputPtr &output);
-
- QString modeId() const;
-+ QString uuid() const
-+ {
-+ return m_uuid;
-+ }
-
- Q_SIGNALS:
- void done();
-@@ -76,6 +83,7 @@ protected:
- void kde_output_device_v2_overscan(uint32_t overscan) override;
- void kde_output_device_v2_vrr_policy(uint32_t vrr_policy) override;
- void kde_output_device_v2_rgb_range(uint32_t rgb_range) override;
-+ void kde_output_device_v2_name(const QString &name) override;
-
- private:
- QString modeName(const WaylandOutputDeviceMode *m) const;
-@@ -96,11 +104,13 @@ private:
- int32_t m_enabled;
- QString m_uuid;
- QString m_serialNumber;
-+ QString m_outputName;
- QString m_eisaId;
- uint32_t m_flags;
- uint32_t m_overscan;
- uint32_t m_vrr_policy;
- uint32_t m_rgbRange;
-+ bool m_isPrimary = false;
- };
-
- }
-diff --git a/backends/kwayland/waylandoutputmanagement.cpp b/backends/kwayland/waylandoutputmanagement.cpp
-index 41db1f3..68e6795 100644
---- a/backends/kwayland/waylandoutputmanagement.cpp
-+++ b/backends/kwayland/waylandoutputmanagement.cpp
-@@ -5,15 +5,15 @@
- * SPDX-License-Identifier: LGPL-2.1-or-later
- */
- #include "waylandoutputmanagement.h"
-+#include "waylandconfig.h"
- #include <QDebug>
-
- namespace KScreen
- {
- WaylandOutputManagement::WaylandOutputManagement(struct ::wl_registry *registry, int id, int version)
- : QObject()
-- , QtWayland::kde_output_management_v2()
-+ , QtWayland::kde_output_management_v2(registry, id, version)
- {
-- init(registry, id, version);
- }
-
- WaylandOutputConfiguration *WaylandOutputManagement::createConfiguration()
-@@ -37,4 +37,14 @@ void WaylandOutputConfiguration::kde_output_configuration_v2_failed()
- Q_EMIT failed();
- }
-
-+WaylandPrimaryOutput::WaylandPrimaryOutput(struct ::wl_registry *registry, int id, int version)
-+ : QObject()
-+ , QtWayland::kde_primary_output_v1(registry, id, version)
-+{
-+}
-+
-+void WaylandPrimaryOutput::kde_primary_output_v1_primary_output(const QString &outputName)
-+{
-+ Q_EMIT primaryOutputChanged(outputName);
-+}
- }
-diff --git a/backends/kwayland/waylandoutputmanagement.h b/backends/kwayland/waylandoutputmanagement.h
-index 1dc1edc..74bb52b 100644
---- a/backends/kwayland/waylandoutputmanagement.h
-+++ b/backends/kwayland/waylandoutputmanagement.h
-@@ -8,12 +8,16 @@
- #define WAYLANDOUTPUTMANAGEMENT_H
-
- #include "qwayland-kde-output-management-v2.h"
-+#include "qwayland-kde-primary-output-v1.h"
-
- #include <QObject>
- #include <QSize>
-
- namespace KScreen
- {
-+class WaylandConfig;
-+class WaylandOutputDevice;
-+
- class WaylandOutputConfiguration : public QObject, public QtWayland::kde_output_configuration_v2
- {
- Q_OBJECT
-@@ -38,6 +42,18 @@ public:
- WaylandOutputConfiguration *createConfiguration();
- };
-
-+class WaylandPrimaryOutput : public QObject, public QtWayland::kde_primary_output_v1
-+{
-+ Q_OBJECT
-+public:
-+ WaylandPrimaryOutput(struct ::wl_registry *registry, int id, int version);
-+
-+Q_SIGNALS:
-+ void primaryOutputChanged(const QString &outputName);
-+
-+protected:
-+ void kde_primary_output_v1_primary_output(const QString &outputName) override;
-+};
- }
-
- #endif // WAYLANDOUTPUTMANAGEMENT_H
---
-GitLab
-