From 2892f05792e1f52b0966f92c5ed1aa75dcdd66a3 Mon Sep 17 00:00:00 2001 From: Robert Pluim Date: Wed, 24 Jan 2018 08:53:59 +0100 Subject: [PATCH] Scale monitor dimensions obtained from GTK This is part one of a two part fix for the GTK scaling problems. See the thread starting at http://lists.gnu.org/archive/html/emacs-devel/2018-01/msg00372.html for an explanation of why it has been added to Emacs 26. * src/xfns.c (Fx_display_monitor_attributes_list): Take scaling factor into account when using GTK to query the monitor dimensions, which allows frameset-restore to position frames correctly. --- src/xfns.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/xfns.c b/src/xfns.c index dd3b36c1330..4ea5113265b 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -4940,6 +4940,7 @@ Internal use only, use `display-monitor-attributes-list' instead. */) gint width_mm = -1, height_mm = -1; GdkRectangle rec, work; struct MonitorInfo *mi = &monitors[i]; + int scale; #if GTK_CHECK_VERSION (3, 22, 0) GdkMonitor *monitor = gdk_display_get_monitor (gdpy, i); @@ -4985,6 +4986,16 @@ Internal use only, use `display-monitor-attributes-list' instead. */) } #endif + /* GTK returns scaled sizes for the workareas. */ +#if GTK_CHECK_VERSION (3, 22, 0) + scale = gdk_monitor_get_scale_factor (monitor); +#else + scale = gdk_screen_get_monitor_scale_factor (gscreen, i); +#endif + rec.width *= scale; + rec.height *= scale; + work.width *= scale; + work.height *= scale; mi->geom.x = rec.x; mi->geom.y = rec.y; -- 2.39.5