summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKai Uwe Broulik <kde@privat.broulik.de>2023-08-23 19:23:24 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-08-25 07:33:07 +0000
commitd44b455a9a7af46517a4c1ff7ba9ca1fd7908725 (patch)
treecc410e178a4f12808726aa06d3fd5abee7bc9f88
parente8506d19d21a2ba0a41e15e3976982e4d52dfec6 (diff)
client: Wait for the compositor to send a fractional scale
Don't assume it's 1.0 initially. Change-Id: I443cb40a0f3421e6d7bdeba550cc8fc94c646319 Reviewed-by: David Edmundson <davidedmundson@kde.org> (cherry picked from commit 1452c8d6ee8fe59763d9d48549fe0fbd2466015c) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/client/qwaylandfractionalscale.cpp7
-rw-r--r--src/client/qwaylandfractionalscale_p.h8
-rw-r--r--src/client/qwaylandwindow.cpp10
3 files changed, 7 insertions, 18 deletions
diff --git a/src/client/qwaylandfractionalscale.cpp b/src/client/qwaylandfractionalscale.cpp
index 324a0b729..34169670f 100644
--- a/src/client/qwaylandfractionalscale.cpp
+++ b/src/client/qwaylandfractionalscale.cpp
@@ -17,17 +17,12 @@ QWaylandFractionalScale::~QWaylandFractionalScale()
destroy();
}
-qreal QWaylandFractionalScale::preferredScale() const
-{
- return mPreferredScale;
-}
-
void QWaylandFractionalScale::wp_fractional_scale_v1_preferred_scale(uint scale)
{
qreal preferredScale = scale / 120.0; // hardcoded denominator determined in the spec
if (preferredScale != mPreferredScale) {
mPreferredScale = preferredScale;
- Q_EMIT preferredScaleChanged();
+ Q_EMIT preferredScaleChanged(preferredScale);
}
}
diff --git a/src/client/qwaylandfractionalscale_p.h b/src/client/qwaylandfractionalscale_p.h
index 0483eb338..c030e60dd 100644
--- a/src/client/qwaylandfractionalscale_p.h
+++ b/src/client/qwaylandfractionalscale_p.h
@@ -20,6 +20,8 @@
#include <QObject>
+#include <optional>
+
QT_BEGIN_NAMESPACE
namespace QtWaylandClient {
@@ -31,16 +33,14 @@ public:
explicit QWaylandFractionalScale(struct ::wp_fractional_scale_v1 *object);
~QWaylandFractionalScale();
- qreal preferredScale() const;
-
Q_SIGNALS:
- void preferredScaleChanged();
+ void preferredScaleChanged(qreal preferredScale);
protected:
void wp_fractional_scale_v1_preferred_scale(uint scale) override;
private:
- qreal mPreferredScale = 1.0;
+ std::optional<qreal> mPreferredScale;
};
}
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index aea2cfff9..cbf1c2a81 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -105,14 +105,8 @@ void QWaylandWindow::initWindow()
if (mDisplay->fractionalScaleManager() && qApp->highDpiScaleFactorRoundingPolicy() == Qt::HighDpiScaleFactorRoundingPolicy::PassThrough) {
mFractionalScale.reset(new QWaylandFractionalScale(mDisplay->fractionalScaleManager()->get_fractional_scale(mSurface->object())));
- qreal preferredScale = std::max(1.0, mFractionalScale->preferredScale());
- if (mScale != preferredScale) {
- mScale = preferredScale;
- QWindowSystemInterface::handleWindowDevicePixelRatioChanged(window());
- }
-
- connect(mFractionalScale.data(), &QWaylandFractionalScale::preferredScaleChanged, this, [this]() {
- qreal preferredScale = std::max(1.0, mFractionalScale->preferredScale());
+ connect(mFractionalScale.data(), &QWaylandFractionalScale::preferredScaleChanged, this, [this](qreal preferredScale) {
+ preferredScale = std::max(1.0, preferredScale);
if (mScale == preferredScale) {
return;
}