applied Sanders max_and_focus.patch
This commit is contained in:
		
							parent
							
								
									6d22782e8f
								
							
						
					
					
						commit
						26157e6973
					
				
							
								
								
									
										40
									
								
								client.c
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								client.c
									
									
									
									
									
								
							| @ -82,22 +82,29 @@ ban(Client *c) | ||||
| void | ||||
| focus(Client *c) | ||||
| { | ||||
| 	Client *old = sel; | ||||
| 	Client *old; | ||||
| 
 | ||||
| 	if(!issel) | ||||
| 		return; | ||||
| 	if(!sel) | ||||
| 		sel = c; | ||||
| 	else if(sel != c) { | ||||
| 		if(sel->ismax) | ||||
| 		if(maximized) | ||||
| 			togglemax(NULL); | ||||
| 		old = sel; | ||||
| 		sel = c; | ||||
| 		if(old) { | ||||
| 			grabbuttons(old, False); | ||||
| 			drawtitle(old); | ||||
| 		} | ||||
| 	} | ||||
| 	if(c) { | ||||
| 		grabbuttons(c, True); | ||||
| 		drawtitle(c); | ||||
| 		XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); | ||||
| 	} | ||||
| 	else | ||||
| 		XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); | ||||
| } | ||||
| 
 | ||||
| Client * | ||||
| @ -247,8 +254,6 @@ manage(Window w, XWindowAttributes *wa) | ||||
| 	clients = c; | ||||
| 
 | ||||
| 	settitle(c); | ||||
| 	if(isvisible(c)) | ||||
| 		sel = c; | ||||
| 	arrange(NULL); | ||||
| 	XMapWindow(dpy, c->win); | ||||
| 	XMapWindow(dpy, c->twin); | ||||
| @ -366,12 +371,13 @@ void | ||||
| togglemax(Arg *arg) | ||||
| { | ||||
| 	int ox, oy, ow, oh; | ||||
| 	Client *c; | ||||
| 	XEvent ev; | ||||
| 
 | ||||
| 	if(!sel) | ||||
| 		return; | ||||
| 
 | ||||
| 	if((sel->ismax = !sel->ismax)) { | ||||
| 	if((maximized = !maximized)) { | ||||
| 		ox = sel->x; | ||||
| 		oy = sel->y; | ||||
| 		ow = sel->w; | ||||
| @ -382,6 +388,9 @@ togglemax(Arg *arg) | ||||
| 		sel->h = sh - 2 - bh; | ||||
| 
 | ||||
| 		restack(); | ||||
| 		for(c = getnext(clients); c; c = getnext(c->next)) | ||||
| 			if(c != sel) | ||||
| 				ban(c); | ||||
| 		resize(sel, arrange == dofloat, TopLeft); | ||||
| 
 | ||||
| 		sel->x = ox; | ||||
| @ -390,37 +399,36 @@ togglemax(Arg *arg) | ||||
| 		sel->h = oh; | ||||
| 	} | ||||
| 	else | ||||
| 		resize(sel, False, TopLeft); | ||||
| 		arrange(NULL); | ||||
| 	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| unmanage(Client *c) | ||||
| { | ||||
| 	Client *tc; | ||||
| 	Client *tc, *fc; | ||||
| 	Window trans; | ||||
| 	XGrabServer(dpy); | ||||
| 	XSetErrorHandler(xerrordummy); | ||||
| 
 | ||||
| 	detach(c); | ||||
| 	if(sel == c) { | ||||
| 		XGetTransientForHint(dpy, c->win, &trans); | ||||
| 		if(trans && (tc = getclient(trans)) && isvisible(tc)) | ||||
| 			fc = tc; | ||||
| 		else | ||||
| 			fc = getnext(clients); | ||||
| 		focus(fc); | ||||
| 	} | ||||
| 
 | ||||
| 	XUngrabButton(dpy, AnyButton, AnyModifier, c->win); | ||||
| 	XDestroyWindow(dpy, c->twin); | ||||
| 
 | ||||
| 	detach(c); | ||||
| 	if(sel == c) { | ||||
| 		if(trans && (tc = getclient(trans)) && isvisible(tc)) | ||||
| 			sel = tc; | ||||
| 		else | ||||
| 			sel = getnext(clients); | ||||
| 	} | ||||
| 	free(c->tags); | ||||
| 	free(c); | ||||
| 
 | ||||
| 	XSync(dpy, False); | ||||
| 	XSetErrorHandler(xerror); | ||||
| 	XUngrabServer(dpy); | ||||
| 	if(sel) | ||||
| 		focus(sel); | ||||
| 	arrange(NULL); | ||||
| } | ||||
|  | ||||
							
								
								
									
										3
									
								
								dwm.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								dwm.h
									
									
									
									
									
								
							| @ -58,7 +58,6 @@ struct Client { | ||||
| 	long flags;  | ||||
| 	unsigned int border, weight; | ||||
| 	Bool isfloat; | ||||
| 	Bool ismax; | ||||
| 	Bool *tags; | ||||
| 	Client *next; | ||||
| 	Client *prev; | ||||
| @ -73,7 +72,7 @@ extern unsigned int ntags, numlockmask; | ||||
| extern void (*handler[LASTEvent])(XEvent *); | ||||
| extern void (*arrange)(Arg *); | ||||
| extern Atom wmatom[WMLast], netatom[NetLast]; | ||||
| extern Bool running, issel, *seltag; | ||||
| extern Bool running, issel, maximized, *seltag; | ||||
| extern Client *clients, *sel; | ||||
| extern Cursor cursor[CurLast]; | ||||
| extern DC dc; | ||||
|  | ||||
							
								
								
									
										8
									
								
								event.c
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								event.c
									
									
									
									
									
								
							| @ -131,15 +131,15 @@ buttonpress(XEvent *e) | ||||
| 	} | ||||
| 	else if((c = getclient(ev->window))) { | ||||
| 		focus(c); | ||||
| 		if(c->ismax || CLEANMASK(ev->state) != MODKEY) | ||||
| 		if(maximized || CLEANMASK(ev->state) != MODKEY) | ||||
| 			return; | ||||
| 		if((ev->button == Button1) && ((arrange == dofloat) || c->isfloat)) { | ||||
| 		if(ev->button == Button1 && (arrange == dofloat || c->isfloat)) { | ||||
| 			restack(c); | ||||
| 			movemouse(c); | ||||
| 		} | ||||
| 		else if(ev->button == Button2) | ||||
| 			zoom(NULL); | ||||
| 		else if(ev->button == Button3 && ((arrange == dofloat) || c->isfloat)) { | ||||
| 		else if(ev->button == Button3 && (arrange == dofloat || c->isfloat)) { | ||||
| 			restack(c); | ||||
| 			resizemouse(c); | ||||
| 		} | ||||
| @ -173,7 +173,7 @@ configurerequest(XEvent *e) | ||||
| 	XWindowChanges wc; | ||||
| 
 | ||||
| 	if((c = getclient(ev->window))) { | ||||
| 		if(!c->isfloat && (arrange != dofloat) && c->ismax) { | ||||
| 		if((c == sel) && !c->isfloat && (arrange != dofloat) && maximized) { | ||||
| 			synconfig(c, sx, sy + bh, sw - 2, sh - 2 - bh, ev->border_width); | ||||
| 			XSync(dpy, False); | ||||
| 			return; | ||||
|  | ||||
							
								
								
									
										1
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								main.c
									
									
									
									
									
								
							| @ -24,6 +24,7 @@ unsigned int ntags, numlockmask; | ||||
| Atom wmatom[WMLast], netatom[NetLast]; | ||||
| Bool running = True; | ||||
| Bool issel = True; | ||||
| Bool maximized = False; | ||||
| Client *clients = NULL; | ||||
| Client *sel = NULL; | ||||
| Cursor cursor[CurLast]; | ||||
|  | ||||
							
								
								
									
										30
									
								
								view.c
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								view.c
									
									
									
									
									
								
							| @ -57,22 +57,20 @@ detach(Client *c) | ||||
| void | ||||
| dofloat(Arg *arg) | ||||
| { | ||||
| 	Client *c; | ||||
| 	Client *c, *fc; | ||||
| 
 | ||||
| 	maximized = False; | ||||
| 
 | ||||
| 	for(c = clients; c; c = c->next) { | ||||
| 		c->ismax = False; | ||||
| 		if(isvisible(c)) { | ||||
| 			resize(c, True, TopLeft); | ||||
| 		} | ||||
| 		else | ||||
| 			ban(c); | ||||
| 	} | ||||
| 	if(!sel || !isvisible(sel)) | ||||
| 		sel = getnext(clients); | ||||
| 	if(sel) | ||||
| 		focus(sel); | ||||
| 	else | ||||
| 		XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); | ||||
| 	if(!(fc = sel) || !isvisible(fc)) | ||||
| 		fc = getnext(clients); | ||||
| 	focus(fc); | ||||
| 	restack(); | ||||
| } | ||||
| 
 | ||||
| @ -80,7 +78,9 @@ void | ||||
| dotile(Arg *arg) | ||||
| { | ||||
| 	int h, i, n, w; | ||||
| 	Client *c; | ||||
| 	Client *c, *fc; | ||||
| 
 | ||||
| 	maximized = False; | ||||
| 
 | ||||
| 	w = sw - mw; | ||||
| 	for(n = 0, c = clients; c; c = c->next) | ||||
| @ -93,7 +93,6 @@ dotile(Arg *arg) | ||||
| 		h = sh - bh; | ||||
| 
 | ||||
| 	for(i = 0, c = clients; c; c = c->next) { | ||||
| 		c->ismax = False; | ||||
| 		if(isvisible(c)) { | ||||
| 			if(c->isfloat) { | ||||
| 				resize(c, True, TopLeft); | ||||
| @ -132,12 +131,9 @@ dotile(Arg *arg) | ||||
| 		else | ||||
| 			ban(c); | ||||
| 	} | ||||
| 	if(!sel || !isvisible(sel)) | ||||
| 		sel = getnext(clients); | ||||
| 	if(sel) | ||||
| 		focus(sel); | ||||
| 	else | ||||
| 		XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); | ||||
| 	if(!(fc = sel) || !isvisible(fc)) | ||||
| 		fc = getnext(clients); | ||||
| 	focus(fc); | ||||
| 	restack(); | ||||
| } | ||||
| 
 | ||||
| @ -289,7 +285,7 @@ zoom(Arg *arg) | ||||
| { | ||||
| 	Client *c = sel; | ||||
| 
 | ||||
| 	if(!c || (arrange != dotile) || c->isfloat || c->ismax) | ||||
| 	if(!c || (arrange != dotile) || c->isfloat || maximized) | ||||
| 		return; | ||||
| 
 | ||||
| 	if(c == getnext(clients)) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user