implemented NET_ACTIVE_WINDOW support
authorAnselm R.Garbe <arg@10ksloc.org>
Tue, 08 Aug 2006 17:08:45 +0200
changeset 229 f4f5d000ce7a
parent 228 ebb1fd90f633
child 230 b92bbc2487c9
implemented NET_ACTIVE_WINDOW support
client.c
dwm.h
event.c
main.c
--- a/client.c	Tue Aug 08 12:58:05 2006 +0200
+++ b/client.c	Tue Aug 08 17:08:45 2006 +0200
@@ -58,6 +58,8 @@
 	drawtitle(c);
 	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
 	XSync(dpy, False);
+	XChangeProperty(dpy, root, netatom[NetActiveWindow], XA_WINDOW, 32,
+			PropModeReplace, (unsigned char *)&c->win, 1);
 	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
 }
 
@@ -459,6 +461,9 @@
 	arrange(NULL);
 	if(sel)
 		focus(sel);
+	else
+		XChangeProperty(dpy, root, netatom[NetActiveWindow], XA_WINDOW, 32,
+				PropModeReplace, (unsigned char *)NULL, 1);
 }
 
 void
--- a/dwm.h	Tue Aug 08 12:58:05 2006 +0200
+++ b/dwm.h	Tue Aug 08 17:08:45 2006 +0200
@@ -22,7 +22,7 @@
 };
 
 /* atoms */
-enum { NetSupported, NetWMName, NetLast };
+enum { NetSupported, NetWMName, NetActiveWindow, NetLast };
 enum { WMProtocols, WMDelete, WMLast };
 
 /* cursor */
--- a/event.c	Tue Aug 08 12:58:05 2006 +0200
+++ b/event.c	Tue Aug 08 17:08:45 2006 +0200
@@ -146,6 +146,18 @@
 }
 
 static void
+clientmessage(XEvent *e)
+{
+	Client *c;
+	XClientMessageEvent *ev = &e->xclient;
+
+	if(ev->message_type == netatom[NetActiveWindow]) {
+		if((c = getclient(ev->window)) && c->tags[tsel])
+			focus(c);
+	}
+}
+
+static void
 configurerequest(XEvent *e)
 {
 	Client *c;
@@ -339,6 +351,7 @@
 
 void (*handler[LASTEvent]) (XEvent *) = {
 	[ButtonPress] = buttonpress,
+	[ClientMessage] = clientmessage,
 	[ConfigureRequest] = configurerequest,
 	[DestroyNotify] = destroynotify,
 	[EnterNotify] = enternotify,
--- a/main.c	Tue Aug 08 12:58:05 2006 +0200
+++ b/main.c	Tue Aug 08 17:08:45 2006 +0200
@@ -201,6 +201,7 @@
 	wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
 	netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
 	netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
+	netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False);
 	XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32,
 			PropModeReplace, (unsigned char *) netatom, NetLast);