diff options
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.patch | 432 |
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 - |