diff --git a/hw/xwayland/xwayland-screen.c b/hw/xwayland/xwayland-screen.c index 6a0f5a2ef..42c9a0e20 100644 --- a/hw/xwayland/xwayland-screen.c +++ b/hw/xwayland/xwayland-screen.c @@ -773,6 +773,26 @@ xwl_screen_lost_focus(struct xwl_screen *xwl_screen) } } +Bool +xwl_screen_should_use_fractional_scale(struct xwl_screen *xwl_screen) +{ + /* Fullscreen uses a viewport already */ + if (xwl_screen->fullscreen) + return FALSE; + + if (xwl_screen->rootless) + return FALSE; + + /* We need both fractional scale and viewporter protocols */ + if (!xwl_screen->fractional_scale_manager) + return FALSE; + + if (!xwl_screen->viewporter) + return FALSE; + + return xwl_screen->hidpi; +} + Bool xwl_screen_update_global_surface_scale(struct xwl_screen *xwl_screen) { @@ -780,6 +800,9 @@ xwl_screen_update_global_surface_scale(struct xwl_screen *xwl_screen) struct xwl_window *xwl_window; int32_t old_scale; + if (xwl_screen_should_use_fractional_scale(xwl_screen)) + return FALSE; + if (xwl_screen->rootless) return FALSE; diff --git a/hw/xwayland/xwayland-screen.h b/hw/xwayland/xwayland-screen.h index d2c0865b8..477473eea 100644 --- a/hw/xwayland/xwayland-screen.h +++ b/hw/xwayland/xwayland-screen.h @@ -173,5 +173,6 @@ void xwl_surface_damage(struct xwl_screen *xwl_screen, int xwl_screen_get_next_output_serial(struct xwl_screen * xwl_screen); void xwl_screen_lost_focus(struct xwl_screen *xwl_screen); Bool xwl_screen_update_global_surface_scale(struct xwl_screen *xwl_screen); +Bool xwl_screen_should_use_fractional_scale(struct xwl_screen *xwl_screen); #endif /* XWAYLAND_SCREEN_H */