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) | 	if(!sel) | ||||||
| 		sel = c; | 		sel = c; | ||||||
| 	else if(sel != c) { | 	else if(sel != c) { | ||||||
| 		if(maximized) |  | ||||||
| 			togglemax(NULL); |  | ||||||
| 		old = sel; | 		old = sel; | ||||||
| 		sel = c; | 		sel = c; | ||||||
| 		if(old) { | 		if(old) { | ||||||
| @ -208,6 +206,10 @@ manage(Window w, XWindowAttributes *wa) { | |||||||
| 	c->w = c->tw = wa->width; | 	c->w = c->tw = wa->width; | ||||||
| 	c->h = wa->height; | 	c->h = wa->height; | ||||||
| 	c->th = bh; | 	c->th = bh; | ||||||
|  | 	c->rx = sx; | ||||||
|  | 	c->ry = bh; | ||||||
|  | 	c->rw = sw; | ||||||
|  | 	c->rh = sh - bh; | ||||||
| 
 | 
 | ||||||
| 	c->border = 0; | 	c->border = 0; | ||||||
| 	updatesize(c); | 	updatesize(c); | ||||||
| @ -369,41 +371,6 @@ updatetitle(Client *c) { | |||||||
| 	resizetitle(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 | void | ||||||
| unmanage(Client *c) { | unmanage(Client *c) { | ||||||
| 	Client *nc; | 	Client *nc; | ||||||
|  | |||||||
| @ -33,7 +33,6 @@ static Key key[] = { \ | |||||||
| 	{ MODKEY,			XK_j,		focusnext,	{ 0 } }, \ | 	{ MODKEY,			XK_j,		focusnext,	{ 0 } }, \ | ||||||
| 	{ MODKEY,			XK_k,		focusprev,	{ 0 } }, \ | 	{ MODKEY,			XK_k,		focusprev,	{ 0 } }, \ | ||||||
| 	{ MODKEY,			XK_Return,	zoom,		{ 0 } }, \ | 	{ MODKEY,			XK_Return,	zoom,		{ 0 } }, \ | ||||||
| 	{ MODKEY,			XK_m,		togglemax,	{ 0 } }, \ |  | ||||||
| 	{ MODKEY,			XK_g,		resizecol,	{ .i = 20 } }, \ | 	{ MODKEY,			XK_g,		resizecol,	{ .i = 20 } }, \ | ||||||
| 	{ MODKEY,			XK_s,		resizecol,	{ .i = -20 } }, \ | 	{ MODKEY,			XK_s,		resizecol,	{ .i = -20 } }, \ | ||||||
| 	{ MODKEY|ShiftMask,		XK_1,		tag,		{ .i = 0 } }, \ | 	{ MODKEY|ShiftMask,		XK_1,		tag,		{ .i = 0 } }, \ | ||||||
|  | |||||||
| @ -28,7 +28,6 @@ static Key key[] = { \ | |||||||
| 	{ MODKEY,			XK_Tab,		focusnext,	{ 0 } }, \ | 	{ MODKEY,			XK_Tab,		focusnext,	{ 0 } }, \ | ||||||
| 	{ MODKEY|ShiftMask,		XK_Tab,		focusprev,	{ 0 } }, \ | 	{ MODKEY|ShiftMask,		XK_Tab,		focusprev,	{ 0 } }, \ | ||||||
| 	{ MODKEY,			XK_Return,	zoom,		{ 0 } }, \ | 	{ MODKEY,			XK_Return,	zoom,		{ 0 } }, \ | ||||||
| 	{ MODKEY,			XK_m,		togglemax,	{ 0 } }, \ |  | ||||||
| 	{ MODKEY,			XK_g,		resizecol,	{ .i = 20 } }, \ | 	{ MODKEY,			XK_g,		resizecol,	{ .i = 20 } }, \ | ||||||
| 	{ MODKEY,			XK_s,		resizecol,	{ .i = -20 } }, \ | 	{ MODKEY,			XK_s,		resizecol,	{ .i = -20 } }, \ | ||||||
| 	{ MODKEY|ShiftMask,		XK_1,		tag,		{ .i = 0 } }, \ | 	{ MODKEY|ShiftMask,		XK_1,		tag,		{ .i = 0 } }, \ | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								dwm.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								dwm.h
									
									
									
									
									
								
							| @ -78,6 +78,7 @@ struct Client { | |||||||
| 	int proto; | 	int proto; | ||||||
| 	int x, y, w, h; | 	int x, y, w, h; | ||||||
| 	int tx, ty, tw, th; /* title window geometry */ | 	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 basew, baseh, incw, inch, maxw, maxh, minw, minh; | ||||||
| 	int grav; | 	int grav; | ||||||
| 	long flags;  | 	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 (*handler[LASTEvent])(XEvent *);	/* event handler */ | ||||||
| extern void (*arrange)(Arg *);			/* arrange function, indicates mode  */ | extern void (*arrange)(Arg *);			/* arrange function, indicates mode  */ | ||||||
| extern Atom wmatom[WMLast], netatom[NetLast]; | 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 Client *clients, *sel, *stack;		/* global cleint list and stack */ | ||||||
| extern Cursor cursor[CurLast]; | extern Cursor cursor[CurLast]; | ||||||
| extern DC dc;					/* global draw context */ | 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 resize(Client *c, Bool sizehints, Corner sticky); /* resize c*/ | ||||||
| extern void updatesize(Client *c);			/* update the size structs of c */ | extern void updatesize(Client *c);			/* update the size structs of c */ | ||||||
| extern void updatetitle(Client *c);		/* update the name 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 */ | extern void unmanage(Client *c);		/* destroy c */ | ||||||
| 
 | 
 | ||||||
| /* draw.c */ | /* draw.c */ | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								event.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								event.c
									
									
									
									
									
								
							| @ -130,7 +130,7 @@ buttonpress(XEvent *e) { | |||||||
| 	} | 	} | ||||||
| 	else if((c = getclient(ev->window))) { | 	else if((c = getclient(ev->window))) { | ||||||
| 		focus(c); | 		focus(c); | ||||||
| 		if(maximized || CLEANMASK(ev->state) != MODKEY) | 		if(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); | ||||||
| @ -170,7 +170,7 @@ configurerequest(XEvent *e) { | |||||||
| 	XWindowChanges wc; | 	XWindowChanges wc; | ||||||
| 
 | 
 | ||||||
| 	if((c = getclient(ev->window))) { | 	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); | 			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,7 +24,6 @@ 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; | ||||||
| Client *stack = NULL; | Client *stack = NULL; | ||||||
|  | |||||||
							
								
								
									
										23
									
								
								view.c
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								view.c
									
									
									
									
									
								
							| @ -61,8 +61,6 @@ void | |||||||
| dofloat(Arg *arg) { | dofloat(Arg *arg) { | ||||||
| 	Client *c; | 	Client *c; | ||||||
| 
 | 
 | ||||||
| 	maximized = False; |  | ||||||
| 
 |  | ||||||
| 	for(c = clients; c; c = c->next) { | 	for(c = clients; c; c = c->next) { | ||||||
| 		if(isvisible(c)) { | 		if(isvisible(c)) { | ||||||
| 			resize(c, True, TopLeft); | 			resize(c, True, TopLeft); | ||||||
| @ -82,8 +80,6 @@ dotile(Arg *arg) { | |||||||
| 	int h, i, n, w; | 	int h, i, n, w; | ||||||
| 	Client *c; | 	Client *c; | ||||||
| 
 | 
 | ||||||
| 	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) | ||||||
| 		if(isvisible(c) && !c->isfloat) | 		if(isvisible(c) && !c->isfloat) | ||||||
| @ -190,7 +186,7 @@ resizecol(Arg *arg) { | |||||||
| 	for(n = 0, c = clients; c; c = c->next) | 	for(n = 0, c = clients; c; c = c->next) | ||||||
| 		if(isvisible(c) && !c->isfloat) | 		if(isvisible(c) && !c->isfloat) | ||||||
| 			n++; | 			n++; | ||||||
| 	if(!sel || sel->isfloat || n < 2 || (arrange != dotile) || maximized) | 	if(!sel || sel->isfloat || n < 2 || (arrange != dotile)) | ||||||
| 		return; | 		return; | ||||||
| 
 | 
 | ||||||
| 	if(sel == getnext(clients)) { | 	if(sel == getnext(clients)) { | ||||||
| @ -273,13 +269,28 @@ viewall(Arg *arg) { | |||||||
| 
 | 
 | ||||||
| void | void | ||||||
| zoom(Arg *arg) { | zoom(Arg *arg) { | ||||||
|  | 	int tmp; | ||||||
| 	unsigned int n; | 	unsigned int n; | ||||||
| 	Client *c; | 	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) | 	for(n = 0, c = clients; c; c = c->next) | ||||||
| 		if(isvisible(c) && !c->isfloat) | 		if(isvisible(c) && !c->isfloat) | ||||||
| 			n++; | 			n++; | ||||||
| 	if(!sel || sel->isfloat || n < 2 || (arrange != dotile) || maximized) | 	if(n < 2 || (arrange != dotile)) | ||||||
| 		return; | 		return; | ||||||
| 
 | 
 | ||||||
| 	if((c = sel) == nexttiled(clients)) | 	if((c = sel) == nexttiled(clients)) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 arg@mmvi
						arg@mmvi