diff options
Diffstat (limited to 'source/kde/kde/patch/libkscreen/cf0921f3fbde31cb94b9ccddcaba36da3a488483.patch')
-rw-r--r-- | source/kde/kde/patch/libkscreen/cf0921f3fbde31cb94b9ccddcaba36da3a488483.patch | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/source/kde/kde/patch/libkscreen/cf0921f3fbde31cb94b9ccddcaba36da3a488483.patch b/source/kde/kde/patch/libkscreen/cf0921f3fbde31cb94b9ccddcaba36da3a488483.patch new file mode 100644 index 000000000..38e932be9 --- /dev/null +++ b/source/kde/kde/patch/libkscreen/cf0921f3fbde31cb94b9ccddcaba36da3a488483.patch @@ -0,0 +1,219 @@ +From cf0921f3fbde31cb94b9ccddcaba36da3a488483 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?M=C3=A9ven=20Car?= <meven29@gmail.com> +Date: Thu, 2 Dec 2021 16:04:20 +0000 +Subject: [PATCH] Under X11 ignore per-screen scale to compute logicalSize + +--- + src/config.cpp | 32 ++++++++++++++++++++++++++++++++ + src/config.h | 4 ++++ + src/output.cpp | 39 +++++++++------------------------------ + src/output.h | 18 ++++-------------- + 4 files changed, 49 insertions(+), 44 deletions(-) + mode change 100644 => 100755 src/output.h + +diff --git a/src/config.cpp b/src/config.cpp +index 37e1038..41abf70 100644 +--- a/src/config.cpp ++++ b/src/config.cpp +@@ -325,6 +325,7 @@ void Config::setPrimaryOutput(const OutputPtr &newPrimary) + void Config::addOutput(const OutputPtr &output) + { + d->outputs.insert(output->id(), output); ++ output->setExplicitLogicalSize(logicalSizeForOutput(*output)); + connect(output.data(), &KScreen::Output::isPrimaryChanged, d, &KScreen::Config::Private::onPrimaryOutputChanged); + + Q_EMIT outputAdded(output); +@@ -391,6 +392,37 @@ void Config::apply(const ConfigPtr &other) + setValid(other->isValid()); + } + ++QRect Config::outputGeometryForOutput(const KScreen::Output &output) const ++{ ++ QSize size = logicalSizeForOutput(output).toSize(); ++ if (!size.isValid()) { ++ return QRect(); ++ } ++ ++ return QRect(output.pos(), size); ++} ++ ++QSizeF Config::logicalSizeForOutput(const KScreen::Output &output) const ++{ ++ QSizeF size = output.enforcedModeSize(); ++ if (!size.isValid()) { ++ return QSizeF(); ++ } ++ // ignore scale where scaling is not per-output ++ if (supportedFeatures().testFlag(Feature::PerOutputScaling)) { ++ size = size / output.scale(); ++ } ++ ++ // We can't use output.size(), because it does not reflect the actual rotation() set by caller. ++ // It is only updated when we get update from KScreen, but not when user changes mode or ++ // rotation manually. ++ ++ if (!output.isHorizontal()) { ++ size = size.transposed(); ++ } ++ return size; ++} ++ + QDebug operator<<(QDebug dbg, const KScreen::ConfigPtr &config) + { + if (config) { +diff --git a/src/config.h b/src/config.h +index 551d7d0..4629dab 100644 +--- a/src/config.h ++++ b/src/config.h +@@ -190,6 +190,10 @@ public: + */ + void setTabletModeEngaged(bool engaged); + ++ QRect outputGeometryForOutput(const KScreen::Output &output) const; ++ ++ QSizeF logicalSizeForOutput(const KScreen::Output &output) const; ++ + Q_SIGNALS: + void outputAdded(const KScreen::OutputPtr &output); + void outputRemoved(int outputId); +diff --git a/src/output.cpp b/src/output.cpp +index c7f5949..a0fae28 100644 +--- a/src/output.cpp ++++ b/src/output.cpp +@@ -13,6 +13,7 @@ + #include "mode.h" + + #include <QCryptographicHash> ++#include <QGuiApplication> + #include <QRect> + #include <QScopedPointer> + #include <QStringList> +@@ -28,7 +29,7 @@ public: + , replicationSource(0) + , rotation(None) + , scale(1.0) +- , logicalSize(QSizeF()) ++ , explicitLogicalSize(QSizeF()) + , connected(false) + , enabled(false) + , primary(false) +@@ -87,7 +88,7 @@ public: + QSize size; + Rotation rotation; + qreal scale; +- QSizeF logicalSize; ++ QSizeF explicitLogicalSize; + bool connected; + bool enabled; + bool primary; +@@ -459,40 +460,18 @@ void Output::setScale(qreal factor) + Q_EMIT scaleChanged(); + } + +-QSizeF Output::logicalSize() const +-{ +- if (d->logicalSize.isValid()) { +- return d->logicalSize; +- } +- +- QSizeF size = enforcedModeSize(); +- if (!size.isValid()) { +- return QSizeF(); +- } +- size = size / d->scale; +- +- // We can't use d->size, because d->size does not reflect the actual rotation() set by caller. +- // It is only updated when we get update from KScreen, but not when user changes mode or +- // rotation manually. +- +- if (!isHorizontal()) { +- size = size.transposed(); +- } +- return size; +-} +- + QSizeF Output::explicitLogicalSize() const + { +- return d->logicalSize; ++ return d->explicitLogicalSize; + } + +-void Output::setLogicalSize(const QSizeF &size) ++void Output::setExplicitLogicalSize(const QSizeF &size) + { +- if (qFuzzyCompare(d->logicalSize.width(), size.width()) && qFuzzyCompare(d->logicalSize.height(), size.height())) { ++ if (qFuzzyCompare(d->explicitLogicalSize.width(), size.width()) && qFuzzyCompare(d->explicitLogicalSize.height(), size.height())) { + return; + } +- d->logicalSize = size; +- Q_EMIT logicalSizeChanged(); ++ d->explicitLogicalSize = size; ++ Q_EMIT explicitLogicalSizeChanged(); + } + + bool Output::isConnected() const +@@ -628,7 +607,7 @@ QSize Output::enforcedModeSize() const + + QRect Output::geometry() const + { +- QSize size = logicalSize().toSize(); ++ QSize size = explicitLogicalSize().toSize(); + if (!size.isValid()) { + return QRect(); + } +diff --git a/src/output.h b/src/output.h +old mode 100644 +new mode 100755 +index 2b23ac4..7edb74c +--- a/src/output.h ++++ b/src/output.h +@@ -47,7 +47,7 @@ public: + Q_PROPERTY(QSize sizeMm READ sizeMm CONSTANT) + Q_PROPERTY(qreal scale READ scale WRITE setScale NOTIFY scaleChanged) + Q_PROPERTY(bool followPreferredMode READ followPreferredMode WRITE setFollowPreferredMode NOTIFY followPreferredModeChanged) +- Q_PROPERTY(QSizeF logicalSize READ logicalSize WRITE setLogicalSize NOTIFY logicalSizeChanged) ++ Q_PROPERTY(QSizeF explicitLogicalSize READ explicitLogicalSize WRITE setExplicitLogicalSize NOTIFY explicitLogicalSizeChanged) + Q_PROPERTY(Capabilities capabilities READ capabilities NOTIFY capabilitiesChanged) + Q_PROPERTY(uint32_t overscan READ overscan WRITE setOverscan NOTIFY overscanChanged) + Q_PROPERTY(VrrPolicy vrrPolicy READ vrrPolicy WRITE setVrrPolicy NOTIFY vrrPolicyChanged) +@@ -311,16 +311,6 @@ public: + */ + void setScale(qreal factor); + +- /** +- * The logical size is the output's representation internal to the display server and its +- * overall screen geometry. +- * +- * returns the logical size of this output +- * +- * @since 5.18 +- */ +- QSizeF logicalSize() const; +- + /** + * The logical size is the output's representation internal to the display server and its + * overall screen geometry. +@@ -338,9 +328,9 @@ public: + * + * @param size of this output in logical space + * +- * @since 5.18 ++ * @since 5.24 + */ +- void setLogicalSize(const QSizeF &size); ++ void setExplicitLogicalSize(const QSizeF &size); + + /** + * @returns whether the mode should be changed to the new preferred mode +@@ -421,7 +411,7 @@ Q_SIGNALS: + void clonesChanged(); + void replicationSourceChanged(); + void scaleChanged(); +- void logicalSizeChanged(); ++ void explicitLogicalSizeChanged(); + void followPreferredModeChanged(bool followPreferredMode); + void capabilitiesChanged(); + void overscanChanged(); +-- +GitLab + |