From 457617b5a31f70ea63e1fcc0729f29e4a9e6b486 Mon Sep 17 00:00:00 2001 From: Skidam <67871298+Skidamek@users.noreply.github.com> Date: Wed, 25 Feb 2026 13:29:12 +0100 Subject: xwayland: normalize OR geometry to logical coords with force_zero_scaling (#13359) Fixes X11 popups, tooltips, and menus showing black boxes on scaled monitors with xwayland:force_zero_scaling = 1 #13334 --- src/layout/target/WindowTarget.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/layout/target/WindowTarget.cpp') diff --git a/src/layout/target/WindowTarget.cpp b/src/layout/target/WindowTarget.cpp index f19ba7ea..05c328af 100644 --- a/src/layout/target/WindowTarget.cpp +++ b/src/layout/target/WindowTarget.cpp @@ -266,6 +266,12 @@ std::expected CWindowTarget::desiredGeomet return std::unexpected(GEOMETRY_NO_DESIRED); } + static auto PXWLFORCESCALEZERO = CConfigValue("xwayland:force_zero_scaling"); + const auto toLogical = [&](SGeometryRequested& req) { + if (m_window->m_isX11 && *PXWLFORCESCALEZERO && PMONITOR) + req.size /= PMONITOR->m_scale; + }; + if (DESIRED_GEOM.width <= 2 || DESIRED_GEOM.height <= 2) { const auto SURFACE = m_window->wlSurface()->resource(); @@ -273,6 +279,7 @@ std::expected CWindowTarget::desiredGeomet // center on mon and call it a day requested.pos.reset(); requested.size = clampSizeForDesired(SURFACE->m_current.size); + toLogical(requested); return requested; } @@ -285,6 +292,7 @@ std::expected CWindowTarget::desiredGeomet if (m_window->m_xwaylandSurface->m_geometry.x != 0 && m_window->m_xwaylandSurface->m_geometry.y != 0) { requested.size = SIZE; requested.pos = g_pXWaylandManager->xwaylandToWaylandCoords(m_window->m_xwaylandSurface->m_geometry.pos()); + toLogical(requested); return requested; } } @@ -318,6 +326,7 @@ std::expected CWindowTarget::desiredGeomet if (DESIRED_GEOM.w <= 2 || DESIRED_GEOM.h <= 2) return std::unexpected(GEOMETRY_NO_DESIRED); + toLogical(requested); return requested; } -- cgit v1.2.3