From 99ac2f5c49bdb51bd3ad28c0824089f22d97b580 Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Wed, 5 Mar 2014 15:42:38 -0500 Subject: [PATCH] Fix font size when gdk_x11_display_set_window_scale() is used We have a hack in the XSETTINGS code to substitute gtk-xft-dpi with gdk-unscaled-dpi unless the screen has a fixed window scale, in which case we just use gtk-xft-dpi. But if the screen is changed to have a fixed window scale, then the substituted value of gdk-unscaled-dpi will stick around until the next (coincidental) change to XSETTINGS. To fix this, force an immediate reread of the XSETTINGS property when gdk_x11_display_set_window_scale() is used. https://bugzilla.gnome.org/show_bug.cgi?id=725754 --- gdk/x11/gdkdisplay-x11.c | 14 +++++++++++++- gdk/x11/xsettings-client.c | 6 ++++++ gdk/x11/xsettings-client.h | 1 + 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c index 1ba4635847..5e7ae75253 100644 --- a/gdk/x11/gdkdisplay-x11.c +++ b/gdk/x11/gdkdisplay-x11.c @@ -2697,6 +2697,7 @@ gdk_x11_display_set_window_scale (GdkDisplay *display, gint scale) { GdkX11Screen *x11_screen; + gboolean need_reread_settings = FALSE; g_return_if_fail (GDK_IS_X11_DISPLAY (display)); @@ -2709,8 +2710,19 @@ gdk_x11_display_set_window_scale (GdkDisplay *display, x11_screen = GDK_X11_SCREEN (GDK_X11_DISPLAY (display)->screen); - x11_screen->fixed_window_scale = TRUE; + if (!x11_screen->fixed_window_scale) + { + x11_screen->fixed_window_scale = TRUE; + + /* We treat screens with a window scale set differently when + * reading xsettings, so we need to reread */ + need_reread_settings = TRUE; + } + _gdk_x11_screen_set_window_scale (x11_screen, scale); + + if (need_reread_settings) + _gdk_x11_settings_force_reread (x11_screen); } diff --git a/gdk/x11/xsettings-client.c b/gdk/x11/xsettings-client.c index e6279b904e..87b4addbea 100644 --- a/gdk/x11/xsettings-client.c +++ b/gdk/x11/xsettings-client.c @@ -581,6 +581,12 @@ _gdk_x11_xsettings_init (GdkX11Screen *x11_screen) check_manager_window (x11_screen, FALSE); } +void +_gdk_x11_settings_force_reread (GdkX11Screen *x11_screen) +{ + read_settings (x11_screen, TRUE); +} + void _gdk_x11_xsettings_finish (GdkX11Screen *x11_screen) { diff --git a/gdk/x11/xsettings-client.h b/gdk/x11/xsettings-client.h index 9ae149e298..89adc7d1af 100644 --- a/gdk/x11/xsettings-client.h +++ b/gdk/x11/xsettings-client.h @@ -27,5 +27,6 @@ void _gdk_x11_xsettings_init (GdkX11Screen *x11_screen); void _gdk_x11_xsettings_finish (GdkX11Screen *x11_screen); +void _gdk_x11_settings_force_reread (GdkX11Screen *x11_screen); #endif /* XSETTINGS_CLIENT_H */