| tapplied Peter/Andreas NetActiveWindow patch in a slightly modified version - d… | |
| git clone git://src.adamsgaard.dk/dwm | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| commit 3c2d303c0e8efc9a08f2e70867794b003b886810 | |
| parent 1e20a0f78a580ebf4ad521d0e074125bb0a7d4b8 | |
| Author: Anselm R Garbe <[email protected]> | |
| Date: Thu, 14 Apr 2011 13:46:25 +0000 | |
| applied Peter/Andreas NetActiveWindow patch in a slightly modified version | |
| Diffstat: | |
| M dwm.c | 31 ++++++++++++++++++++++-------… | |
| 1 file changed, 22 insertions(+), 9 deletions(-) | |
| --- | |
| diff --git a/dwm.c b/dwm.c | |
| t@@ -58,7 +58,7 @@ | |
| enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ | |
| enum { ColBorder, ColFG, ColBG, ColLast }; /* color */ | |
| enum { NetSupported, NetWMName, NetWMState, | |
| - NetWMFullscreen, NetLast }; /* EWMH atoms */ | |
| + NetWMFullscreen, NetActiveWindow, NetLast }; /* EWMH atoms */ | |
| enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms… | |
| enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, | |
| ClkClientWin, ClkRootWin, ClkLast }; /* clicks */ | |
| t@@ -1259,11 +1259,11 @@ propertynotify(XEvent *e) { | |
| void | |
| clientmessage(XEvent *e) { | |
| XClientMessageEvent *cme = &e->xclient; | |
| - Client *c; | |
| + Client *c = wintoclient(cme->window); | |
| - if((c = wintoclient(cme->window)) | |
| - && (cme->message_type == netatom[NetWMState] && cme->data.l[1] == neta… | |
| - { | |
| + if(!c) | |
| + return; | |
| + if(cme->message_type == netatom[NetWMState] && cme->data.l[1] == netat… | |
| if(cme->data.l[0]) { | |
| XChangeProperty(dpy, cme->window, netatom[NetWMState],… | |
| PropModeReplace, (unsigned char*)&neta… | |
| t@@ -1287,6 +1287,16 @@ clientmessage(XEvent *e) { | |
| arrange(c->mon); | |
| } | |
| } | |
| + else if(cme->message_type == netatom[NetActiveWindow]) { | |
| + if(!ISVISIBLE(c)) { | |
| + Arg a = { .ui = c->tags }; | |
| + view(&a); | |
| + } | |
| + detach(c); | |
| + attach(c); | |
| + focus(c); | |
| + arrange(c->mon); | |
| + } | |
| } | |
| void | |
| t@@ -1460,7 +1470,7 @@ sendevent(Client *c, Atom proto) { | |
| exists = protocols[n] == proto; | |
| XFree(protocols); | |
| } | |
| - if (exists) { | |
| + if(exists) { | |
| ev.type = ClientMessage; | |
| ev.xclient.window = c->win; | |
| ev.xclient.message_type = wmatom[WMProtocols]; | |
| t@@ -1474,7 +1484,7 @@ sendevent(Client *c, Atom proto) { | |
| void | |
| setfocus(Client *c) { | |
| - if (!c->neverfocus) | |
| + if(!c->neverfocus) | |
| XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); | |
| sendevent(c, wmatom[WMTakeFocus]); | |
| } | |
| t@@ -1525,6 +1535,7 @@ setup(void) { | |
| wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); | |
| wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); | |
| wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False); | |
| + netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", Fals… | |
| wmatom[WMTakeFocus] = XInternAtom(dpy, "WM_TAKE_FOCUS", False); | |
| netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False); | |
| netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); | |
| t@@ -1942,8 +1953,10 @@ updatewmhints(Client *c) { | |
| } | |
| else | |
| c->isurgent = (wmh->flags & XUrgencyHint) ? True : Fal… | |
| - if (wmh->flags & InputHint) c->neverfocus = !wmh->input; | |
| - else c->neverfocus = False; | |
| + if(wmh->flags & InputHint) | |
| + c->neverfocus = !wmh->input; | |
| + else | |
| + c->neverfocus = False; | |
| XFree(wmh); | |
| } | |
| } |