summary refs log tree commit diff
path: root/xutil.c
diff options
context:
space:
mode:
authorokan <okan>2009-12-07 21:20:52 +0000
committerokan <okan>2009-12-07 21:20:52 +0000
commit3e309894c1d0f6ff9302109d72a0ffb25612d537 (patch)
treee4827ad0cdacb639b43d5262e88a896fa4087fb5 /xutil.c
parent46630531f876c8043756e6622ca8be9e578bb2fa (diff)
downloadcwm-3e309894c1d0f6ff9302109d72a0ffb25612d537.tar.gz
cwm-3e309894c1d0f6ff9302109d72a0ffb25612d537.tar.xz
cwm-3e309894c1d0f6ff9302109d72a0ffb25612d537.zip
introduce the beginnings of netwm support, minimally and correctly;
allows java to be happy, but additionally stops others from whinning
about a non-netwm complaint wm.  more to come.

written a few times; this one includes a clever hack from oga@ to
populate _NET_SUPPORTED.

ok oga@
Diffstat (limited to 'xutil.c')
-rw-r--r--xutil.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/xutil.c b/xutil.c
index a6caed4..06b7d0d 100644
--- a/xutil.c
+++ b/xutil.c
@@ -177,6 +177,10 @@ char 		*atoms[CWM_NO_ATOMS] = {
 	"WM_PROTOCOLS",
 	"_MOTIF_WM_HINTS",
 	"_CWM_GRP",
+	"UTF8_STRING",
+	"_NET_SUPPORTED",
+	"_NET_SUPPORTING_WM_CHECK",
+	"_NET_WM_NAME",
 };
 
 void
@@ -185,6 +189,31 @@ xu_getatoms(void)
 	XInternAtoms(X_Dpy, atoms, CWM_NO_ATOMS, False, cwm_atoms);
 }
 
+void
+xu_setwmname(struct screen_ctx *sc)
+{
+	/*
+	 * set up the _NET_SUPPORTED hint with all netwm atoms that we
+	 * know about.
+	 */
+	XChangeProperty(X_Dpy, sc->rootwin, _NET_SUPPORTED, XA_ATOM, 32,
+	    PropModeReplace,  (unsigned char *)&_NET_SUPPORTED,
+	    CWM_NO_ATOMS - CWM_NETWM_START);
+	/*
+	 * netwm spec says that to prove that the hint is not stale you must
+	 * provide _NET_SUPPORTING_WM_CHECK containing a window (we use the
+	 * menu window). The property must be set on the root window and the
+	 * window itself, the window also must have _NET_WM_NAME set with the
+	 * window manager name.
+	 */
+	XChangeProperty(X_Dpy, sc->rootwin, _NET_SUPPORTING_WM_CHECK,
+	    XA_WINDOW, 32, PropModeReplace, (unsigned char *)&sc->menuwin, 1);
+	XChangeProperty(X_Dpy, sc->menuwin, _NET_SUPPORTING_WM_CHECK,
+	    XA_WINDOW, 32, PropModeReplace, (unsigned char *)&sc->menuwin, 1);
+	XChangeProperty(X_Dpy, sc->menuwin, _NET_WM_NAME, UTF8_STRING,
+	    8, PropModeReplace, WMNAME, strlen(WMNAME));
+}
+
 unsigned long
 xu_getcolor(struct screen_ctx *sc, char *name)
 {