From 34e3f7ecde67263c380938d2f4f690f9b41afb87 Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Mon, 13 Feb 2023 22:59:52 +0000 Subject: client: Utilize new handleWindowDevicePixelRatioChanged MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rather than assuming window scale should match the screen scale use an explicit notification system. This fixes issues caused by drift between the two: Task-number: QTBUG-101656 Task-number: QTBUG-93380 Change-Id: I9edb5fd95b8ceeca8073db1f56d81a31bbc9c549 Reviewed-by: Vlad Zahorodnii Reviewed-by: Morten Johan Sørvig --- src/client/qwaylandwindow.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp index 954d6df3..6aa2c6ab 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -104,12 +104,17 @@ void QWaylandWindow::initWindow() if (mDisplay->fractionalScaleManager() && qApp->highDpiScaleFactorRoundingPolicy() == Qt::HighDpiScaleFactorRoundingPolicy::PassThrough) { mFractionalScale.reset(new QWaylandFractionalScale(mDisplay->fractionalScaleManager()->get_fractional_scale(mSurface->object()))); - mScale = mFractionalScale->preferredScale(); + if (mScale != mFractionalScale->preferredScale()) { + mScale = mFractionalScale->preferredScale(); + QWindowSystemInterface::handleWindowDevicePixelRatioChanged(window()); + } + connect(mFractionalScale.data(), &QWaylandFractionalScale::preferredScaleChanged, this, [this]() { if (mScale == mFractionalScale->preferredScale()) { return; } mScale = mFractionalScale->preferredScale(); + QWindowSystemInterface::handleWindowDevicePixelRatioChanged(window()); ensureSize(); if (mViewport) updateViewport(); @@ -1326,6 +1331,7 @@ void QWaylandWindow::handleScreensChanged() if (scale != mScale) { mScale = scale; + QWindowSystemInterface::handleWindowDevicePixelRatioChanged(window()); if (mSurface) { if (mViewport) updateViewport(); -- cgit v1.2.1