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));
}
arrange(NULL);
if(sel)
focus(sel);
+ else
+ XChangeProperty(dpy, root, netatom[NetActiveWindow], XA_WINDOW, 32,
+ PropModeReplace, (unsigned char *)NULL, 1);
}
void
};
/* atoms */
-enum { NetSupported, NetWMName, NetLast };
+enum { NetSupported, NetWMName, NetActiveWindow, NetLast };
enum { WMProtocols, WMDelete, WMLast };
/* cursor */
}
}
+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)
{
void (*handler[LASTEvent]) (XEvent *) = {
[ButtonPress] = buttonpress,
+ [ClientMessage] = clientmessage,
[ConfigureRequest] = configurerequest,
[DestroyNotify] = destroynotify,
[EnterNotify] = enternotify,
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);