| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -227,7 +227,6 @@ void (*handler[LASTEvent]) (XEvent *) = { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						[UnmapNotify] = unmapnotify | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					Atom wmatom[WMLast], netatom[NetLast]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					Bool isxinerama = False; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					Bool domwfact = True; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					Bool dozoom = True; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					Bool otherwm, readin; | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -246,6 +245,7 @@ Window root; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					/* configuration, allows nested code to access above variables */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include "config.h" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define TAGSZ (LENGTH(tags) * sizeof(Bool)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					/* function implementations */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -286,7 +286,7 @@ applyrules(Client *c) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(ch.res_name) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							XFree(ch.res_name); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(!matched) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							memcpy(c->tags, seltags, sizeof initags); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							memcpy(c->tags, seltags, TAGSZ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							c->view = selview; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -654,10 +654,8 @@ enternotify(XEvent *e) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Client *c; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XCrossingEvent *ev = &e->xcrossing; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(ev->mode != NotifyNormal || ev->detail == NotifyInferior) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if(!isxinerama || ev->window != root) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								return; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if((ev->mode != NotifyNormal || ev->detail == NotifyInferior) && ev->window != root) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							return; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if((c = getclient(ev->window))) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							focus(c); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						else | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -1042,7 +1040,7 @@ manage(Window w, XWindowAttributes *wa) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XWindowChanges wc; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						c = emallocz(sizeof(Client)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						c->tags = emallocz(sizeof initags); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						c->tags = emallocz(TAGSZ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						c->win = w; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						applyrules(c); | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -1082,7 +1080,7 @@ manage(Window w, XWindowAttributes *wa) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if((rettrans = XGetTransientForHint(dpy, w, &trans) == Success)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							for(t = clients; t && t->win != trans; t = t->next); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(t) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							memcpy(c->tags, t->tags, sizeof initags); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							memcpy(c->tags, t->tags, TAGSZ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(!c->isfloating) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							c->isfloating = (rettrans == Success) || c->isfixed; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						attach(c); | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -1501,7 +1499,7 @@ setmwfact(const char *arg) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					setup(void) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						unsigned int i; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						unsigned int i, j; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						View *v; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XSetWindowAttributes wa; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XineramaScreenInfo *info = NULL; | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -1519,10 +1517,10 @@ setup(void) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if((isxinerama = XineramaIsActive(dpy))) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(XineramaIsActive(dpy)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							info = XineramaQueryScreens(dpy, &nviews); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#if defined(AIM_XINERAMA) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					isxinerama = True; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					nviews = 2; /* aim Xinerama */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#endif | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						views = emallocz(nviews * sizeof(View)); | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -1551,16 +1549,27 @@ nviews = 2; /* aim Xinerama */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								blw = i; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						seltags = emallocz(sizeof initags); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						prevtags = emallocz(sizeof initags); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						memcpy(seltags, initags, sizeof initags); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						memcpy(prevtags, initags, sizeof initags); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						seltags = emallocz(TAGSZ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						prevtags = emallocz(TAGSZ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						/* check, if vtags need assistance, because there is only 1 view */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(nviews == 1) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							for(i = 0; i < LENGTH(tags); i++) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								vtags[i] = 0; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						for(i = 0; i < nviews; i++) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							/* init geometry */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							v = &views[i]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if(nviews != 1 && isxinerama) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							/* select first tag in each view */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							for(j = 0; j < LENGTH(tags); j++) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								if(vtags[j] == i) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									seltags[j] = prevtags[j] = True;  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if(info) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#if defined(AIM_XINERAMA) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					v->w = DisplayWidth(dpy, screen) / 2; | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -1693,8 +1702,6 @@ tile(View *v) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						for(i = 0, c = mc = nexttiled(clients, v); c; c = nexttiled(c->next, v)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if(i == 0) { /* master */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								nx = v->wax; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								ny = v->way; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								nw = mw - 2 * c->border; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								nh = v->wah - 2 * c->border; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							} | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -1908,9 +1915,9 @@ view(const char *arg) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							tmp[i] = (NULL == arg); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						tmp[idxoftag(arg)] = True; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(memcmp(seltags, tmp, sizeof initags) != 0) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							memcpy(prevtags, seltags, sizeof initags); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							memcpy(seltags, tmp, sizeof initags); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(memcmp(seltags, tmp, TAGSZ) != 0) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							memcpy(prevtags, seltags, TAGSZ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							memcpy(seltags, tmp, TAGSZ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							arrange(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -1934,9 +1941,9 @@ void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					viewprevtag(const char *arg) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						static Bool tmp[LENGTH(tags)]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						memcpy(tmp, seltags, sizeof initags); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						memcpy(seltags, prevtags, sizeof initags); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						memcpy(prevtags, tmp, sizeof initags); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						memcpy(tmp, seltags, TAGSZ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						memcpy(seltags, prevtags, TAGSZ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						memcpy(prevtags, tmp, TAGSZ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						arrange(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |