From ec82a44b40821d334d3fcecc1f18f57add590416 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= Date: Tue, 16 Jun 2020 00:48:38 +0200 Subject: =?UTF-8?q?XCB:=20Update=20logical=20DPI=20on=20=E2=80=9CXft/DPI?= =?UTF-8?q?=E2=80=9D=20change?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Install XSettings property change callback on the “Xft/DPI” property. Update QxcbVirtualDesktop::m_forcedDpi and QScreen logicalDPI on change. Pick-to: 5.15 Change-Id: I578ebe9017fee58acd7a5c432cbd614fd35f2f55 Reviewed-by: Tor Arne Vestbø --- src/plugins/platforms/xcb/qxcbscreen.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/plugins/platforms') diff --git a/src/plugins/platforms/xcb/qxcbscreen.cpp b/src/plugins/platforms/xcb/qxcbscreen.cpp index 9dc7c97eab..4d3f269cf4 100644 --- a/src/plugins/platforms/xcb/qxcbscreen.cpp +++ b/src/plugins/platforms/xcb/qxcbscreen.cpp @@ -112,6 +112,20 @@ QXcbVirtualDesktop::QXcbVirtualDesktop(QXcbConnection *connection, xcb_screen_t xcb_depth_next(&depth_iterator); } + + auto dpiChangedCallback = [](QXcbVirtualDesktop *desktop, const QByteArray &, const QVariant &property, void *) { + bool ok; + int dpiTimes1k = property.toInt(&ok); + if (!ok) + return; + int dpi = dpiTimes1k / 1024; + if (desktop->m_forcedDpi == dpi) + return; + desktop->m_forcedDpi = dpi; + for (QXcbScreen *screen : desktop->connection()->screens()) + QWindowSystemInterface::handleScreenLogicalDotsPerInchChange(screen->QPlatformScreen::screen(), dpi, dpi); + }; + xSettings()->registerCallbackForProperty("Xft/DPI", dpiChangedCallback, nullptr); } QXcbVirtualDesktop::~QXcbVirtualDesktop() -- cgit v1.2.3