diff --git a/glfw/wl_platform.h b/glfw/wl_platform.h index 9b01c2fed..0f4a37a76 100644 --- a/glfw/wl_platform.h +++ b/glfw/wl_platform.h @@ -168,7 +168,7 @@ typedef struct _GLFWwindowWayland struct wp_fractional_scale_v1 *wp_fractional_scale_v1; struct wp_viewport *wp_viewport; struct org_kde_kwin_blur *org_kde_kwin_blur; - bool has_blur; + bool has_blur, expect_scale_from_compositor; struct { GLFWLayerShellConfig config; struct zwlr_layer_surface_v1* zwlr_layer_surface_v1; diff --git a/glfw/wl_window.c b/glfw/wl_window.c index 90bcf025f..1e6bcc4f8 100644 --- a/glfw/wl_window.c +++ b/glfw/wl_window.c @@ -554,10 +554,16 @@ static bool createSurface(_GLFWwindow* window, if (xscale <= 0.0001 || xscale != xscale || xscale >= 24) xscale = 1.0; if (xscale > 1) scale = (int)xscale; } + window->wl.expect_scale_from_compositor = _glfw.wl.has_preferred_buffer_scale; if (_glfw.wl.wp_fractional_scale_manager_v1 && _glfw.wl.wp_viewporter) { window->wl.wp_fractional_scale_v1 = wp_fractional_scale_manager_v1_get_fractional_scale(_glfw.wl.wp_fractional_scale_manager_v1, window->wl.surface); - window->wl.wp_viewport = wp_viewporter_get_viewport(_glfw.wl.wp_viewporter, window->wl.surface); - wp_fractional_scale_v1_add_listener(window->wl.wp_fractional_scale_v1, &fractional_scale_listener, window); + if (window->wl.wp_fractional_scale_v1) { + window->wl.wp_viewport = wp_viewporter_get_viewport(_glfw.wl.wp_viewporter, window->wl.surface); + if (window->wl.wp_viewport) { + wp_fractional_scale_v1_add_listener(window->wl.wp_fractional_scale_v1, &fractional_scale_listener, window); + window->wl.expect_scale_from_compositor = true; + } + } } if (_glfw.wl.org_kde_kwin_blur_manager && wndconfig->blur_radius > 0) _glfwPlatformSetWindowBlur(window, wndconfig->blur_radius);