From 929b98d85af60a187cb7425b50bd8f6cd42b8e10 Mon Sep 17 00:00:00 2001 From: Olivier Fourdan Date: Fri, 19 Jul 2019 14:10:08 +0200 Subject: [PATCH 2/4] 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