implemented NET_ACTIVE_WINDOW support

This commit is contained in:
Anselm R.Garbe 2006-08-08 17:08:45 +02:00
parent c86f131681
commit 92e55c7c53
4 changed files with 20 additions and 1 deletions

View File

@ -58,6 +58,8 @@ focus(Client *c)
drawtitle(c); drawtitle(c);
XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
XSync(dpy, False); XSync(dpy, False);
XChangeProperty(dpy, root, netatom[NetActiveWindow], XA_WINDOW, 32,
PropModeReplace, (unsigned char *)&c->win, 1);
while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
} }
@ -459,6 +461,9 @@ unmanage(Client *c)
arrange(NULL); arrange(NULL);
if(sel) if(sel)
focus(sel); focus(sel);
else
XChangeProperty(dpy, root, netatom[NetActiveWindow], XA_WINDOW, 32,
PropModeReplace, (unsigned char *)NULL, 1);
} }
void void

2
dwm.h
View File

@ -22,7 +22,7 @@ union Arg {
}; };
/* atoms */ /* atoms */
enum { NetSupported, NetWMName, NetLast }; enum { NetSupported, NetWMName, NetActiveWindow, NetLast };
enum { WMProtocols, WMDelete, WMLast }; enum { WMProtocols, WMDelete, WMLast };
/* cursor */ /* cursor */

13
event.c
View File

@ -145,6 +145,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 static void
configurerequest(XEvent *e) configurerequest(XEvent *e)
{ {
@ -339,6 +351,7 @@ unmapnotify(XEvent *e)
void (*handler[LASTEvent]) (XEvent *) = { void (*handler[LASTEvent]) (XEvent *) = {
[ButtonPress] = buttonpress, [ButtonPress] = buttonpress,
[ClientMessage] = clientmessage,
[ConfigureRequest] = configurerequest, [ConfigureRequest] = configurerequest,
[DestroyNotify] = destroynotify, [DestroyNotify] = destroynotify,
[EnterNotify] = enternotify, [EnterNotify] = enternotify,

1
main.c
View File

@ -201,6 +201,7 @@ main(int argc, char *argv[])
wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False); netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", 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, XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32,
PropModeReplace, (unsigned char *) netatom, NetLast); PropModeReplace, (unsigned char *) netatom, NetLast);