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 */