register the _NET_WM_CM_S hint with the correct screen number
authorDana Jansens <danakj@orodu.net>
Fri, 15 Feb 2008 05:09:11 +0000 (00:09 -0500)
committerDana Jansens <danakj@orodu.net>
Fri, 15 Feb 2008 15:46:01 +0000 (10:46 -0500)
xcompmgr.c

index 9c996c8..41cc3bd 100644 (file)
@@ -155,6 +155,7 @@ Bool            winTypeFade[NUM_WINTYPES];
 
 /* opacity property name; sometime soon I'll write up an EWMH spec for it */
 #define OPACITY_PROP   "_NET_WM_WINDOW_OPACITY"
 
 /* opacity property name; sometime soon I'll write up an EWMH spec for it */
 #define OPACITY_PROP   "_NET_WM_WINDOW_OPACITY"
+#define REGISTER_PROP   "_NET_WM_CM_S"
 
 #define TRANSLUCENT    0xe0000000
 #define OPAQUE         0xffffffff
 
 #define TRANSLUCENT    0xe0000000
 #define OPAQUE         0xffffffff
@@ -1914,10 +1915,14 @@ usage (char *program)
 }
 
 static void
 }
 
 static void
-register_cm (void)
+register_cm (int scr)
 {
     Window w;
     Atom a;
 {
     Window w;
     Atom a;
+    char *buf;
+    int len, s;
+
+    if (scr < 0) return;
 
     w = XCreateSimpleWindow (dpy, RootWindow (dpy, 0), 0, 0, 1, 1, 0, None,
                             None);
 
     w = XCreateSimpleWindow (dpy, RootWindow (dpy, 0), 0, 0, 1, 1, 0, None,
                             None);
@@ -1925,8 +1930,17 @@ register_cm (void)
     Xutf8SetWMProperties (dpy, w, "xcompmgr", "xcompmgr", NULL, 0, NULL, NULL,
                          NULL);
 
     Xutf8SetWMProperties (dpy, w, "xcompmgr", "xcompmgr", NULL, 0, NULL, NULL,
                          NULL);
 
-    /* FIXME: Don't hard code the screen number */
-    a = XInternAtom (dpy, "_NET_WM_CM_S0", False);
+    len = strlen(REGISTER_PROP) + 2;
+    s = scr;
+    while (s >= 10) {
+        ++len;
+        s /= 10;
+    }
+    buf = malloc(len);
+    snprintf(buf, len, REGISTER_PROP"%d", scr);
+
+    a = XInternAtom (dpy, buf, False);
+    free(buf);
 
     XSetSelectionOwner (dpy, a, w, 0);
 }
 
     XSetSelectionOwner (dpy, a, w, 0);
 }
@@ -2076,7 +2090,7 @@ main (int argc, char **argv)
        exit (1);
     }
 
        exit (1);
     }
 
-    register_cm();
+    register_cm(scr);
 
     /* get atoms */
     opacityAtom = XInternAtom (dpy, OPACITY_PROP, False);
 
     /* get atoms */
     opacityAtom = XInternAtom (dpy, OPACITY_PROP, False);