dwm

my fork of dwm
Index Commits Files Refs README LICENSE
commit 92e55c7c53cb808b584982ac8f6d69112d713fab
parent c86f131681182258208ef97e81206ccc44e718ee
Author: Anselm R.Garbe <arg@10ksloc.org>
Date:   Tue,  8 Aug 2006 17:08:45 +0200

implemented NET_ACTIVE_WINDOW support

Diffstat:
Mclient.c | 5+++++
Mdwm.h | 2+-
Mevent.c | 13+++++++++++++
Mmain.c | 1+
4 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/client.c b/client.c
@@ -58,6 +58,8 @@ focus(Client *c)
     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 @@ unmanage(Client *c)
     arrange(NULL);
     if(sel)
         focus(sel);
+    else
+        XChangeProperty(dpy, root, netatom[NetActiveWindow], XA_WINDOW, 32,
+                PropModeReplace, (unsigned char *)NULL, 1);
 }
 
 void
diff --git a/dwm.h b/dwm.h
@@ -22,7 +22,7 @@ union Arg {
 };
 
 /* atoms */
-enum { NetSupported, NetWMName, NetLast };
+enum { NetSupported, NetWMName, NetActiveWindow, NetLast };
 enum { WMProtocols, WMDelete, WMLast };
 
 /* cursor */
diff --git a/event.c b/event.c
@@ -146,6 +146,18 @@ buttonpress(XEvent *e)
 }
 
 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 @@ unmapnotify(XEvent *e)
 
 void (*handler[LASTEvent]) (XEvent *) = {
     [ButtonPress] = buttonpress,
+    [ClientMessage] = clientmessage,
     [ConfigureRequest] = configurerequest,
     [DestroyNotify] = destroynotify,
     [EnterNotify] = enternotify,
diff --git a/main.c b/main.c
@@ -201,6 +201,7 @@ main(int argc, char *argv[])
     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);