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