diff options
| author | arg@mmvi <unknown> | 2006-09-22 07:37:56 +0200 | 
|---|---|---|
| committer | arg@mmvi <unknown> | 2006-09-22 07:37:56 +0200 | 
| commit | d800ec05ff63451193a0b858c114f5144534c2a1 (patch) | |
| tree | cc6261bca4c022b6a22d0a1568bf3ea3ec4c9c06 | |
| parent | bda53ac6ad834824e8e5d5678ccd638a122c173a (diff) | |
| download | dwm-d800ec05ff63451193a0b858c114f5144534c2a1.tar.gz | |
implemented the maximization as I described on the mailinglist, this feels better to me.
| -rw-r--r-- | client.c | 41 | ||||
| -rw-r--r-- | config.arg.h | 1 | ||||
| -rw-r--r-- | config.default.h | 1 | ||||
| -rw-r--r-- | dwm.h | 4 | ||||
| -rw-r--r-- | event.c | 4 | ||||
| -rw-r--r-- | main.c | 1 | ||||
| -rw-r--r-- | view.c | 23 | 
7 files changed, 25 insertions, 50 deletions
| @@ -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); @@ -370,41 +372,6 @@ updatetitle(Client *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; diff --git a/config.arg.h b/config.arg.h index 9bb581e..6f9aed2 100644 --- a/config.arg.h +++ b/config.arg.h @@ -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 } }, \ diff --git a/config.default.h b/config.default.h index ad048ae..9c67d98 100644 --- a/config.default.h +++ b/config.default.h @@ -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 } }, \ @@ -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 */ @@ -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; @@ -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; @@ -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)) | 
