From 0580a8c3ec148058377eccdc641d3af5f91b8f30 Mon Sep 17 00:00:00 2001 From: Olivier Fourdan Date: Fri, 19 Jul 2019 14:10:08 +0200 Subject: [PATCH 2/2] xsettings: Grab and sync the X server at startup (Bug #15725) Grab the Xserver when declaring ourself the xsettings manager and flush it prior to ungrab it to make sure all get set for other clients. The goal is to avoid other X11 clients from reading xsettings until we are done initializing. Signed-off-by: Olivier Fourdan --- xfsettingsd/xsettings.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/xfsettingsd/xsettings.c b/xfsettingsd/xsettings.c index eb3cc6de..681b83e9 100644 --- a/xfsettingsd/xsettings.c +++ b/xfsettingsd/xsettings.c @@ -1086,7 +1086,8 @@ xfce_xsettings_helper_register (XfceXSettingsHelper *helper, xdisplay = GDK_DISPLAY_XDISPLAY (gdkdisplay); helper->xsettings_atom = XInternAtom (xdisplay, "_XSETTINGS_SETTINGS", False); - gdk_x11_display_error_trap_push (gdk_display_get_default ()); + gdk_x11_display_grab (gdkdisplay); + gdk_x11_display_error_trap_push (gdkdisplay); /* Previously, gdk_display_get_n_screens. Since Gtk 3.10, the number of screens is always 1. */ n_screens = 1; @@ -1166,7 +1167,9 @@ xfce_xsettings_helper_register (XfceXSettingsHelper *helper, } } - if (gdk_x11_display_error_trap_pop (gdk_display_get_default ()) != 0) + gdk_display_sync (gdkdisplay); + gdk_x11_display_ungrab (gdkdisplay); + if (gdk_x11_display_error_trap_pop (gdkdisplay) != 0) g_critical ("Failed to initialize screens"); if (helper->screens != NULL) -- 2.21.0