|  | @@ -520,6 +520,46 @@ clearurgent(Client *c) {
 | 
	
		
			
				|  |  |  	XFree(wmh);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +void
 | 
	
		
			
				|  |  | +clientmessage(XEvent *e) {
 | 
	
		
			
				|  |  | +	XClientMessageEvent *cme = &e->xclient;
 | 
	
		
			
				|  |  | +	Client *c = wintoclient(cme->window);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	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);
 | 
	
		
			
				|  |  | +			c->oldstate = c->isfloating;
 | 
	
		
			
				|  |  | +			c->oldbw = c->bw;
 | 
	
		
			
				|  |  | +			c->bw = 0;
 | 
	
		
			
				|  |  | +			c->isfloating = True;
 | 
	
		
			
				|  |  | +			resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh);
 | 
	
		
			
				|  |  | +			XRaiseWindow(dpy, c->win);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		else {
 | 
	
		
			
				|  |  | +			XChangeProperty(dpy, cme->window, netatom[NetWMState], XA_ATOM, 32,
 | 
	
		
			
				|  |  | +			                PropModeReplace, (unsigned char*)0, 0);
 | 
	
		
			
				|  |  | +			c->isfloating = c->oldstate;
 | 
	
		
			
				|  |  | +			c->bw = c->oldbw;
 | 
	
		
			
				|  |  | +			c->x = c->oldx;
 | 
	
		
			
				|  |  | +			c->y = c->oldy;
 | 
	
		
			
				|  |  | +			c->w = c->oldw;
 | 
	
		
			
				|  |  | +			c->h = c->oldh;
 | 
	
		
			
				|  |  | +			resizeclient(c, c->x, c->y, c->w, c->h);
 | 
	
		
			
				|  |  | +			arrange(c->mon);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	else if(cme->message_type == netatom[NetActiveWindow]) {
 | 
	
		
			
				|  |  | +		if(!ISVISIBLE(c)) {
 | 
	
		
			
				|  |  | +			c->mon->seltags ^= 1;                                   
 | 
	
		
			
				|  |  | +			c->mon->tagset[c->mon->seltags] = c->tags;   
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		pop(c);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  void
 | 
	
		
			
				|  |  |  configure(Client *c) {
 | 
	
		
			
				|  |  |  	XConfigureEvent ce;
 | 
	
	
		
			
				|  | @@ -1212,14 +1252,12 @@ nexttiled(Client *c) {
 | 
	
		
			
				|  |  |  	return c;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -Monitor *
 | 
	
		
			
				|  |  | -ptrtomon(int x, int y) {
 | 
	
		
			
				|  |  | -	Monitor *m;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	for(m = mons; m; m = m->next)
 | 
	
		
			
				|  |  | -		if(INRECT(x, y, m->wx, m->wy, m->ww, m->wh))
 | 
	
		
			
				|  |  | -			return m;
 | 
	
		
			
				|  |  | -	return selmon;
 | 
	
		
			
				|  |  | +void
 | 
	
		
			
				|  |  | +pop(Client *c) {
 | 
	
		
			
				|  |  | +	detach(c);
 | 
	
		
			
				|  |  | +	attach(c);
 | 
	
		
			
				|  |  | +	focus(c);
 | 
	
		
			
				|  |  | +	arrange(c->mon);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void
 | 
	
	
		
			
				|  | @@ -1256,49 +1294,15 @@ propertynotify(XEvent *e) {
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -void
 | 
	
		
			
				|  |  | -clientmessage(XEvent *e) {
 | 
	
		
			
				|  |  | -	XClientMessageEvent *cme = &e->xclient;
 | 
	
		
			
				|  |  | -	Client *c = wintoclient(cme->window);
 | 
	
		
			
				|  |  | +Monitor *
 | 
	
		
			
				|  |  | +ptrtomon(int x, int y) {
 | 
	
		
			
				|  |  | +	Monitor *m;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	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);
 | 
	
		
			
				|  |  | -			c->oldstate = c->isfloating;
 | 
	
		
			
				|  |  | -			c->oldbw = c->bw;
 | 
	
		
			
				|  |  | -			c->bw = 0;
 | 
	
		
			
				|  |  | -			c->isfloating = True;
 | 
	
		
			
				|  |  | -			resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh);
 | 
	
		
			
				|  |  | -			XRaiseWindow(dpy, c->win);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		else {
 | 
	
		
			
				|  |  | -			XChangeProperty(dpy, cme->window, netatom[NetWMState], XA_ATOM, 32,
 | 
	
		
			
				|  |  | -			                PropModeReplace, (unsigned char*)0, 0);
 | 
	
		
			
				|  |  | -			c->isfloating = c->oldstate;
 | 
	
		
			
				|  |  | -			c->bw = c->oldbw;
 | 
	
		
			
				|  |  | -			c->x = c->oldx;
 | 
	
		
			
				|  |  | -			c->y = c->oldy;
 | 
	
		
			
				|  |  | -			c->w = c->oldw;
 | 
	
		
			
				|  |  | -			c->h = c->oldh;
 | 
	
		
			
				|  |  | -			resizeclient(c, c->x, c->y, c->w, c->h);
 | 
	
		
			
				|  |  | -			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);
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | +	for(m = mons; m; m = m->next)
 | 
	
		
			
				|  |  | +		if(INRECT(x, y, m->wx, m->wy, m->ww, m->wh))
 | 
	
		
			
				|  |  | +			return m;
 | 
	
		
			
				|  |  | +	return selmon;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  void
 | 
	
		
			
				|  |  |  quit(const Arg *arg) {
 | 
	
		
			
				|  |  |  	running = False;
 | 
	
	
		
			
				|  | @@ -2043,10 +2047,7 @@ zoom(const Arg *arg) {
 | 
	
		
			
				|  |  |  	if(c == nexttiled(selmon->clients))
 | 
	
		
			
				|  |  |  		if(!c || !(c = nexttiled(c->next)))
 | 
	
		
			
				|  |  |  			return;
 | 
	
		
			
				|  |  | -	detach(c);
 | 
	
		
			
				|  |  | -	attach(c);
 | 
	
		
			
				|  |  | -	focus(c);
 | 
	
		
			
				|  |  | -	arrange(c->mon);
 | 
	
		
			
				|  |  | +	pop(c);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  int
 |