From 9d8621575ced218f08d5b486725dd3c28d0b27c6 Mon Sep 17 00:00:00 2001 From: Yann Droneaud Date: Tue, 24 Mar 2009 12:02:03 +0100 Subject: [PATCH 2/3] Check for _NET_WM_CM_Sn before trying to install ourself as composite manager Check for a selection owner of _NET_WM_CM_Sn is the first thing to do before taking ownership on it, so clients watching for selection ownership changes won't be disturbed. --- xcompmgr.c | 15 +++++++++++++-- 1 files changed, 13 insertions(+), 2 deletions(-) diff --git a/xcompmgr.c b/xcompmgr.c index 669d5bb..938a37e 100644 --- a/xcompmgr.c +++ b/xcompmgr.c @@ -1867,7 +1867,7 @@ usage (char *program) exit (1); } -static void +static Bool register_cm (void) { Window w; @@ -1877,6 +1877,12 @@ register_cm (void) snprintf (net_wm_cm, sizeof (net_wm_cm), "_NET_WM_CM_S%d", scr); a = XInternAtom (dpy, net_wm_cm, False); + if (XGetSelectionOwner (dpy, a) != None) + { + fprintf (stderr, "Another composite manager is already running\n"); + return False; + } + w = XCreateSimpleWindow (dpy, RootWindow (dpy, scr), 0, 0, 1, 1, 0, None, None); @@ -1884,6 +1890,8 @@ register_cm (void) NULL); XSetSelectionOwner (dpy, a, w, 0); + + return True; } int @@ -2007,7 +2015,10 @@ main (int argc, char **argv) exit (1); } - register_cm(); + if (!register_cm()) + { + exit (1); + } /* get atoms */ opacityAtom = XInternAtom (dpy, OPACITY_PROP, False); -- 1.6.0.2