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); | |
} | |
} |