implemented the maximization as I described on the mailinglist, this feels better to me.
This commit is contained in:
		
							parent
							
								
									bda53ac6ad
								
							
						
					
					
						commit
						d800ec05ff
					
				
							
								
								
									
										41
									
								
								client.c
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								client.c
									
									
									
									
									
								
							| @ -89,8 +89,6 @@ focus(Client *c) { | ||||
| 	if(!sel) | ||||
| 		sel = c; | ||||
| 	else if(sel != c) { | ||||
| 		if(maximized) | ||||
| 			togglemax(NULL); | ||||
| 		old = sel; | ||||
| 		sel = c; | ||||
| 		if(old) { | ||||
| @ -208,6 +206,10 @@ manage(Window w, XWindowAttributes *wa) { | ||||
| 	c->w = c->tw = wa->width; | ||||
| 	c->h = wa->height; | ||||
| 	c->th = bh; | ||||
| 	c->rx = sx; | ||||
| 	c->ry = bh; | ||||
| 	c->rw = sw; | ||||
| 	c->rh = sh - bh; | ||||
| 
 | ||||
| 	c->border = 0; | ||||
| 	updatesize(c); | ||||
| @ -369,41 +371,6 @@ updatetitle(Client *c) { | ||||
| 	resizetitle(c); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| togglemax(Arg *arg) { | ||||
| 	int ox, oy, ow, oh; | ||||
| 	Client *c; | ||||
| 	XEvent ev; | ||||
| 
 | ||||
| 	if(!sel) | ||||
| 		return; | ||||
| 
 | ||||
| 	if((maximized = !maximized)) { | ||||
| 		ox = sel->x; | ||||
| 		oy = sel->y; | ||||
| 		ow = sel->w; | ||||
| 		oh = sel->h; | ||||
| 		sel->x = sx; | ||||
| 		sel->y = sy + bh; | ||||
| 		sel->w = sw - 2; | ||||
| 		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; | ||||
| 		sel->y = oy; | ||||
| 		sel->w = ow; | ||||
| 		sel->h = oh; | ||||
| 	} | ||||
| 	else | ||||
| 		arrange(NULL); | ||||
| 	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| unmanage(Client *c) { | ||||
| 	Client *nc; | ||||
|  | ||||
| @ -33,7 +33,6 @@ static Key key[] = { \ | ||||
| 	{ MODKEY,			XK_j,		focusnext,	{ 0 } }, \ | ||||
| 	{ MODKEY,			XK_k,		focusprev,	{ 0 } }, \ | ||||
| 	{ MODKEY,			XK_Return,	zoom,		{ 0 } }, \ | ||||
| 	{ MODKEY,			XK_m,		togglemax,	{ 0 } }, \ | ||||
| 	{ MODKEY,			XK_g,		resizecol,	{ .i = 20 } }, \ | ||||
| 	{ MODKEY,			XK_s,		resizecol,	{ .i = -20 } }, \ | ||||
| 	{ MODKEY|ShiftMask,		XK_1,		tag,		{ .i = 0 } }, \ | ||||
|  | ||||
| @ -28,7 +28,6 @@ static Key key[] = { \ | ||||
| 	{ MODKEY,			XK_Tab,		focusnext,	{ 0 } }, \ | ||||
| 	{ MODKEY|ShiftMask,		XK_Tab,		focusprev,	{ 0 } }, \ | ||||
| 	{ MODKEY,			XK_Return,	zoom,		{ 0 } }, \ | ||||
| 	{ MODKEY,			XK_m,		togglemax,	{ 0 } }, \ | ||||
| 	{ MODKEY,			XK_g,		resizecol,	{ .i = 20 } }, \ | ||||
| 	{ MODKEY,			XK_s,		resizecol,	{ .i = -20 } }, \ | ||||
| 	{ MODKEY|ShiftMask,		XK_1,		tag,		{ .i = 0 } }, \ | ||||
|  | ||||
							
								
								
									
										4
									
								
								dwm.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								dwm.h
									
									
									
									
									
								
							| @ -78,6 +78,7 @@ struct Client { | ||||
| 	int proto; | ||||
| 	int x, y, w, h; | ||||
| 	int tx, ty, tw, th; /* title window geometry */ | ||||
| 	int rx, ry, rw, rh; /* revert geometry */ | ||||
| 	int basew, baseh, incw, inch, maxw, maxh, minw, minh; | ||||
| 	int grav; | ||||
| 	long flags;  | ||||
| @ -99,7 +100,7 @@ extern unsigned int ntags, numlockmask;		/* number of tags, dynamic lock mask */ | ||||
| extern void (*handler[LASTEvent])(XEvent *);	/* event handler */ | ||||
| extern void (*arrange)(Arg *);			/* arrange function, indicates mode  */ | ||||
| extern Atom wmatom[WMLast], netatom[NetLast]; | ||||
| extern Bool running, issel, maximized, *seltag;	/* seltag is array of Bool */ | ||||
| extern Bool running, issel, *seltag;		/* seltag is array of Bool */ | ||||
| extern Client *clients, *sel, *stack;		/* global cleint list and stack */ | ||||
| extern Cursor cursor[CurLast]; | ||||
| extern DC dc;					/* global draw context */ | ||||
| @ -117,7 +118,6 @@ extern void manage(Window w, XWindowAttributes *wa);	/* manage new client */ | ||||
| extern void resize(Client *c, Bool sizehints, Corner sticky); /* resize c*/ | ||||
| extern void updatesize(Client *c);			/* update the size structs of c */ | ||||
| extern void updatetitle(Client *c);		/* update the name of c */ | ||||
| extern void togglemax(Arg *arg);		/* (un)maximize c */ | ||||
| extern void unmanage(Client *c);		/* destroy c */ | ||||
| 
 | ||||
| /* draw.c */ | ||||
|  | ||||
							
								
								
									
										4
									
								
								event.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								event.c
									
									
									
									
									
								
							| @ -130,7 +130,7 @@ buttonpress(XEvent *e) { | ||||
| 	} | ||||
| 	else if((c = getclient(ev->window))) { | ||||
| 		focus(c); | ||||
| 		if(maximized || CLEANMASK(ev->state) != MODKEY) | ||||
| 		if(CLEANMASK(ev->state) != MODKEY) | ||||
| 			return; | ||||
| 		if(ev->button == Button1 && (arrange == dofloat || c->isfloat)) { | ||||
| 			restack(c); | ||||
| @ -170,7 +170,7 @@ configurerequest(XEvent *e) { | ||||
| 	XWindowChanges wc; | ||||
| 
 | ||||
| 	if((c = getclient(ev->window))) { | ||||
| 		if((c == sel) && !c->isfloat && (arrange != dofloat) && maximized) { | ||||
| 		if((c == sel) && !c->isfloat && (arrange != dofloat)) { | ||||
| 			synconfig(c, sx, sy + bh, sw - 2, sh - 2 - bh, ev->border_width); | ||||
| 			XSync(dpy, False); | ||||
| 			return; | ||||
|  | ||||
							
								
								
									
										1
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								main.c
									
									
									
									
									
								
							| @ -24,7 +24,6 @@ unsigned int ntags, numlockmask; | ||||
| Atom wmatom[WMLast], netatom[NetLast]; | ||||
| Bool running = True; | ||||
| Bool issel = True; | ||||
| Bool maximized = False; | ||||
| Client *clients = NULL; | ||||
| Client *sel = NULL; | ||||
| Client *stack = NULL; | ||||
|  | ||||
							
								
								
									
										23
									
								
								view.c
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								view.c
									
									
									
									
									
								
							| @ -61,8 +61,6 @@ void | ||||
| dofloat(Arg *arg) { | ||||
| 	Client *c; | ||||
| 
 | ||||
| 	maximized = False; | ||||
| 
 | ||||
| 	for(c = clients; c; c = c->next) { | ||||
| 		if(isvisible(c)) { | ||||
| 			resize(c, True, TopLeft); | ||||
| @ -82,8 +80,6 @@ dotile(Arg *arg) { | ||||
| 	int h, i, n, w; | ||||
| 	Client *c; | ||||
| 
 | ||||
| 	maximized = False; | ||||
| 
 | ||||
| 	w = sw - mw; | ||||
| 	for(n = 0, c = clients; c; c = c->next) | ||||
| 		if(isvisible(c) && !c->isfloat) | ||||
| @ -190,7 +186,7 @@ resizecol(Arg *arg) { | ||||
| 	for(n = 0, c = clients; c; c = c->next) | ||||
| 		if(isvisible(c) && !c->isfloat) | ||||
| 			n++; | ||||
| 	if(!sel || sel->isfloat || n < 2 || (arrange != dotile) || maximized) | ||||
| 	if(!sel || sel->isfloat || n < 2 || (arrange != dotile)) | ||||
| 		return; | ||||
| 
 | ||||
| 	if(sel == getnext(clients)) { | ||||
| @ -273,13 +269,28 @@ viewall(Arg *arg) { | ||||
| 
 | ||||
| void | ||||
| zoom(Arg *arg) { | ||||
| 	int tmp; | ||||
| 	unsigned int n; | ||||
| 	Client *c; | ||||
| 	XEvent ev; | ||||
| 
 | ||||
| 	if(!sel) | ||||
| 		return; | ||||
| 
 | ||||
| 	if(sel->isfloat || (arrange == dofloat)) { | ||||
| 		tmp = sel->x; sel->x = sel->rx; sel->rx = tmp; | ||||
| 		tmp = sel->y; sel->y = sel->ry; sel->ry = tmp; | ||||
| 		tmp = sel->w; sel->w = sel->rw; sel->rw = tmp; | ||||
| 		tmp = sel->h; sel->h = sel->rh; sel->rh = tmp; | ||||
| 		resize(sel, True, TopLeft); | ||||
| 		while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	for(n = 0, c = clients; c; c = c->next) | ||||
| 		if(isvisible(c) && !c->isfloat) | ||||
| 			n++; | ||||
| 	if(!sel || sel->isfloat || n < 2 || (arrange != dotile) || maximized) | ||||
| 	if(n < 2 || (arrange != dotile)) | ||||
| 		return; | ||||
| 
 | ||||
| 	if((c = sel) == nexttiled(clients)) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 arg@mmvi
						arg@mmvi