diff options
| author | Anselm R Garbe <anselm@garbe.us> | 2011-04-14 13:46:25 +0000 | 
|---|---|---|
| committer | Anselm R Garbe <anselm@garbe.us> | 2011-04-14 13:46:25 +0000 | 
| commit | 3c2d303c0e8efc9a08f2e70867794b003b886810 (patch) | |
| tree | ef033ea4737dcf645e50bd010d70bfbab7b3314c | |
| parent | 1e20a0f78a580ebf4ad521d0e074125bb0a7d4b8 (diff) | |
applied Peter/Andreas NetActiveWindow patch in a slightly modified version
| -rw-r--r-- | dwm.c | 31 | 
1 files changed, 22 insertions, 9 deletions
| @@ -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 */ @@ -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] == netatom[NetWMFullscreen])) -	{ +	if(!c) +		return; +	if(cme->message_type == netatom[NetWMState] && cme->data.l[1] == netatom[NetWMFullscreen]) {  		if(cme->data.l[0]) {  			XChangeProperty(dpy, cme->window, netatom[NetWMState], XA_ATOM, 32,  			                PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1); @@ -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 @@ -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]; @@ -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]);  } @@ -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", False);  	wmatom[WMTakeFocus] = XInternAtom(dpy, "WM_TAKE_FOCUS", False);  	netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);  	netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); @@ -1942,8 +1953,10 @@ updatewmhints(Client *c) {  		}  		else  			c->isurgent = (wmh->flags & XUrgencyHint) ? True : False; -		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);  	}  } | 
