| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -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 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |