diff options
author | Kai Uwe Broulik <kde@privat.broulik.de> | 2023-08-23 19:23:24 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-08-25 07:33:07 +0000 |
commit | d44b455a9a7af46517a4c1ff7ba9ca1fd7908725 (patch) | |
tree | cc410e178a4f12808726aa06d3fd5abee7bc9f88 | |
parent | e8506d19d21a2ba0a41e15e3976982e4d52dfec6 (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.cpp | 7 | ||||
-rw-r--r-- | src/client/qwaylandfractionalscale_p.h | 8 | ||||
-rw-r--r-- | src/client/qwaylandwindow.cpp | 10 |
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; } |