From 5301a74bd3554612540ef7a59079a78e732644c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Mon, 20 Jun 2022 10:11:29 +0200 Subject: [PATCH] [x11] Fix coordinate space of rect in gdk_x11_surface_get_frame_extents when called on popups. If we take the early return we don't unscale this at the bottom of the function, causing wrong coordinates in HiDPI screens. This bug also affects GTK3 (I noticed this running Firefox tests on X). --- gdk/x11/gdksurface-x11.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/gdk/x11/gdksurface-x11.c b/gdk/x11/gdksurface-x11.c index fb3b0bd7df..e21ba9b5b6 100644 --- a/gdk/x11/gdksurface-x11.c +++ b/gdk/x11/gdksurface-x11.c @@ -2793,14 +2793,19 @@ gdk_x11_surface_get_frame_extents (GdkSurface *surface, impl = GDK_X11_SURFACE (surface); /* Refine our fallback answer a bit using local information */ - rect->x = impl->abs_x * impl->surface_scale; - rect->y = impl->abs_y * impl->surface_scale; - rect->width = surface->width * impl->surface_scale; - rect->height = surface->height * impl->surface_scale; + rect->x = impl->abs_x; + rect->y = impl->abs_y; + rect->width = surface->width; + rect->height = surface->height; if (GDK_SURFACE_DESTROYED (surface) || impl->override_redirect) return; + rect->x *= impl->surface_scale; + rect->y *= impl->surface_scale; + rect->width *= impl->surface_scale; + rect->height *= impl->surface_scale; + nvroots = 0; vroots = NULL;