implemented the maximization as I described on the mailinglist, this feels better to me.
This commit is contained in:
		
							
								
								
									
										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))
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user