| 
																	
																	
																	
																 | 
																@ -1,4 +1,4 @@ | 
															
														
														
													
														
															
																 | 
																 | 
																//#define XINULATOR /* debug, simulates dual head */ | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																#define XINULATOR /* debug, simulates dual head */ | 
															
														
														
													
														
															
																 | 
																 | 
																/* See LICENSE file for copyright and license details. | 
																 | 
																 | 
																/* See LICENSE file for copyright and license details. | 
															
														
														
													
														
															
																 | 
																 | 
																 * | 
																 | 
																 | 
																 * | 
															
														
														
													
														
															
																 | 
																 | 
																 * dynamic window manager is designed like any other X client as well. It is | 
																 | 
																 | 
																 * dynamic window manager is designed like any other X client as well. It is | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -211,6 +211,7 @@ static void togglebar(const Arg *arg); | 
															
														
														
													
														
															
																 | 
																 | 
																static void togglefloating(const Arg *arg); | 
																 | 
																 | 
																static void togglefloating(const Arg *arg); | 
															
														
														
													
														
															
																 | 
																 | 
																static void toggletag(const Arg *arg); | 
																 | 
																 | 
																static void toggletag(const Arg *arg); | 
															
														
														
													
														
															
																 | 
																 | 
																static void toggleview(const Arg *arg); | 
																 | 
																 | 
																static void toggleview(const Arg *arg); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																static void unfocus(Client *c); | 
															
														
														
													
														
															
																 | 
																 | 
																static void unmanage(Client *c); | 
																 | 
																 | 
																static void unmanage(Client *c); | 
															
														
														
													
														
															
																 | 
																 | 
																static void unmapnotify(XEvent *e); | 
																 | 
																 | 
																static void unmapnotify(XEvent *e); | 
															
														
														
													
														
															
																 | 
																 | 
																static void updategeom(void); | 
																 | 
																 | 
																static void updategeom(void); | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -391,9 +392,23 @@ buttonpress(XEvent *e) { | 
															
														
														
													
														
															
																 | 
																 | 
																	unsigned int i, x, click; | 
																 | 
																 | 
																	unsigned int i, x, click; | 
															
														
														
													
														
															
																 | 
																 | 
																	Arg arg = {0}; | 
																 | 
																 | 
																	Arg arg = {0}; | 
															
														
														
													
														
															
																 | 
																 | 
																	Client *c; | 
																 | 
																 | 
																	Client *c; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	Monitor *m; | 
															
														
														
													
														
															
																 | 
																 | 
																	XButtonPressedEvent *ev = &e->xbutton; | 
																 | 
																 | 
																	XButtonPressedEvent *ev = &e->xbutton; | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																	click = ClkRootWin; | 
																 | 
																 | 
																	click = ClkRootWin; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	/* focus monitor if necessary */ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	for(m = mons; m; m = m->next) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		if(ev->window == m->barwin) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			if(m != selmon) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																				if(selmon->stack) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																					focus(selmon->stack); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																				else { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																					selmon = m; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																					focus(NULL); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																				} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			break; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		} | 
															
														
														
													
														
															
																 | 
																 | 
																	if(ev->window == selmon->barwin && ev->x >= selmon->btx) { | 
																 | 
																 | 
																	if(ev->window == selmon->barwin && ev->x >= selmon->btx) { | 
															
														
														
													
														
															
																 | 
																 | 
																		i = 0; | 
																 | 
																 | 
																		i = 0; | 
															
														
														
													
														
															
																 | 
																 | 
																		x = selmon->btx; | 
																 | 
																 | 
																		x = selmon->btx; | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -757,10 +772,8 @@ void | 
															
														
														
													
														
															
																 | 
																 | 
																focus(Client *c) { | 
																 | 
																 | 
																focus(Client *c) { | 
															
														
														
													
														
															
																 | 
																 | 
																	if(!c || !ISVISIBLE(c)) | 
																 | 
																 | 
																	if(!c || !ISVISIBLE(c)) | 
															
														
														
													
														
															
																 | 
																 | 
																		for(c = selmon->stack; c && !ISVISIBLE(c); c = c->snext); | 
																 | 
																 | 
																		for(c = selmon->stack; c && !ISVISIBLE(c); c = c->snext); | 
															
														
														
													
														
															
																 | 
																 | 
																	if(selmon->sel && selmon->sel != c) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																		grabbuttons(selmon->sel, False); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																		XSetWindowBorder(dpy, selmon->sel->win, dc.norm[ColBorder]); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	} | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if(selmon->sel) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		unfocus(selmon->sel); | 
															
														
														
													
														
															
																 | 
																 | 
																	if(c) { | 
																 | 
																 | 
																	if(c) { | 
															
														
														
													
														
															
																 | 
																 | 
																		if(c->mon != selmon) | 
																 | 
																 | 
																		if(c->mon != selmon) | 
															
														
														
													
														
															
																 | 
																 | 
																			selmon = c->mon; | 
																 | 
																 | 
																			selmon = c->mon; | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -797,6 +810,7 @@ focusmon(const Arg *arg) { | 
															
														
														
													
														
															
																 | 
																 | 
																			if(m->stack) | 
																 | 
																 | 
																			if(m->stack) | 
															
														
														
													
														
															
																 | 
																 | 
																				focus(m->stack); | 
																 | 
																 | 
																				focus(m->stack); | 
															
														
														
													
														
															
																 | 
																 | 
																			else { | 
																 | 
																 | 
																			else { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																				unfocus(selmon->stack); | 
															
														
														
													
														
															
																 | 
																 | 
																				selmon = m; | 
																 | 
																 | 
																				selmon = m; | 
															
														
														
													
														
															
																 | 
																 | 
																				focus(NULL); | 
																 | 
																 | 
																				focus(NULL); | 
															
														
														
													
														
															
																 | 
																 | 
																			} | 
																 | 
																 | 
																			} | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -1219,8 +1233,7 @@ resize(Client *c, int x, int y, int w, int h) { | 
															
														
														
													
														
															
																 | 
																 | 
																		c->w = wc.width = w; | 
																 | 
																 | 
																		c->w = wc.width = w; | 
															
														
														
													
														
															
																 | 
																 | 
																		c->h = wc.height = h; | 
																 | 
																 | 
																		c->h = wc.height = h; | 
															
														
														
													
														
															
																 | 
																 | 
																		wc.border_width = c->bw; | 
																 | 
																 | 
																		wc.border_width = c->bw; | 
															
														
														
													
														
															
																 | 
																 | 
																		XConfigureWindow(dpy, c->win, | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																				CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc); | 
															
														
														
													
														
															
																 | 
																 | 
																		configure(c); | 
																 | 
																 | 
																		configure(c); | 
															
														
														
													
														
															
																 | 
																 | 
																		XSync(dpy, False); | 
																 | 
																 | 
																		XSync(dpy, False); | 
															
														
														
													
														
															
																 | 
																 | 
																	} | 
																 | 
																 | 
																	} | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -1589,6 +1602,14 @@ toggleview(const Arg *arg) { | 
															
														
														
													
														
															
																 | 
																 | 
																	} | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																void | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																unfocus(Client *c) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if(!c) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		return; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	grabbuttons(c, False); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	XSetWindowBorder(dpy, c->win, dc.norm[ColBorder]); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																void | 
																 | 
																 | 
																void | 
															
														
														
													
														
															
																 | 
																 | 
																unmanage(Client *c) { | 
																 | 
																 | 
																unmanage(Client *c) { | 
															
														
														
													
														
															
																 | 
																 | 
																	XWindowChanges wc; | 
																 | 
																 | 
																	XWindowChanges wc; | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -1732,7 +1753,7 @@ updategeom(void) { | 
															
														
														
													
														
															
																 | 
																 | 
																	} | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																	/* reassign left over clients of disappeared monitors */ | 
																 | 
																 | 
																	/* reassign left over clients of disappeared monitors */ | 
															
														
														
													
														
															
																 | 
																 | 
																	for(tm = mons; tm; tm = tm->next) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	for(tm = mons; tm; tm = tm->next) | 
															
														
														
													
														
															
																 | 
																 | 
																		while(tm->clients) { | 
																 | 
																 | 
																		while(tm->clients) { | 
															
														
														
													
														
															
																 | 
																 | 
																			c = tm->clients; | 
																 | 
																 | 
																			c = tm->clients; | 
															
														
														
													
														
															
																 | 
																 | 
																			tm->clients = c->next; | 
																 | 
																 | 
																			tm->clients = c->next; | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																			
																		
																	
																 | 
																@ -1741,7 +1762,6 @@ updategeom(void) { | 
															
														
														
													
														
															
																 | 
																 | 
																			attach(c); | 
																 | 
																 | 
																			attach(c); | 
															
														
														
													
														
															
																 | 
																 | 
																			attachstack(c); | 
																 | 
																 | 
																			attachstack(c); | 
															
														
														
													
														
															
																 | 
																 | 
																		} | 
																 | 
																 | 
																		} | 
															
														
														
													
														
															
																 | 
																 | 
																	} | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																	/* select focused monitor */ | 
																 | 
																 | 
																	/* select focused monitor */ | 
															
														
														
													
														
															
																 | 
																 | 
																	selmon = newmons; | 
																 | 
																 | 
																	selmon = newmons; | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																	
																 | 
																
  |