diff options
| author | Anselm R. Garbe <arg@10kloc.org> | 2006-08-22 16:50:21 +0200 | 
|---|---|---|
| committer | Anselm R. Garbe <arg@10kloc.org> | 2006-08-22 16:50:21 +0200 | 
| commit | aa13727067af829b94461eb36aa029297ed8e6b9 (patch) | |
| tree | aaaae4d7d65711bfb5c2153b60fdb33990564e6b | |
| parent | 595028614bc94c1733b28725dcf9777b0a47ad24 (diff) | |
separated several functions into view.c
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | client.c | 61 | ||||
| -rw-r--r-- | dwm.h | 22 | ||||
| -rw-r--r-- | tag.c | 186 | ||||
| -rw-r--r-- | view.c | 253 | 
5 files changed, 266 insertions, 258 deletions
| @@ -3,7 +3,7 @@  include config.mk -SRC = client.c draw.c event.c main.c tag.c util.c +SRC = client.c draw.c event.c main.c tag.c util.c view.c  OBJ = ${SRC:.c=.o}  all: options dwm @@ -89,40 +89,6 @@ focus(Client *c)  	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);  } -void -focusnext(Arg *arg) -{ -	Client *c; -    -	if(!sel) -		return; - -	if(!(c = getnext(sel->next))) -		c = getnext(clients); -	if(c) { -		focus(c); -		restack(); -	} -} - -void -focusprev(Arg *arg) -{ -	Client *c; - -	if(!sel) -		return; - -	if(!(c = getprev(sel->prev))) { -		for(c = clients; c && c->next; c = c->next); -		c = getprev(c); -	} -	if(c) { -		focus(c); -		restack(); -	} -} -  Client *  getclient(Window w)  { @@ -446,30 +412,3 @@ unmanage(Client *c)  		focus(sel);  	arrange(NULL);  } - -void -zoom(Arg *arg) -{ -	Client *c; - -	if(!sel || (arrange != dotile) || sel->isfloat || sel->ismax) -		return; - -	if(sel == getnext(clients))  { -		if((c = getnext(sel->next))) -			sel = c; -		else -			return; -	} - -	/* pop */ -	sel->prev->next = sel->next; -	if(sel->next) -		sel->next->prev = sel->prev; -	sel->prev = NULL; -	clients->prev = sel; -	sel->next = clients; -	clients = sel; -	focus(sel); -	arrange(NULL); -} @@ -84,8 +84,6 @@ extern Window root, barwin;  /* client.c */  extern void ban(Client *c);  extern void focus(Client *c); -extern void focusnext(Arg *arg); -extern void focusprev(Arg *arg);  extern Client *getclient(Window w);  extern Client *getctitle(Window w);  extern void gravitate(Client *c, Bool invert); @@ -96,7 +94,6 @@ extern void setsize(Client *c);  extern void settitle(Client *c);  extern void togglemax(Arg *arg);  extern void unmanage(Client *c); -extern void zoom(Arg *arg);  /* draw.c */  extern void drawall(); @@ -117,22 +114,27 @@ extern void sendevent(Window w, Atom a, long value);  extern int xerror(Display *dsply, XErrorEvent *ee);  /* tag.c */ -extern void dofloat(Arg *arg); -extern void dotile(Arg *arg);  extern void initrregs(); -extern Bool isvisible(Client *c);  extern Client *getnext(Client *c);  extern Client *getprev(Client *c); -extern void restack();  extern void settags(Client *c);  extern void tag(Arg *arg); -extern void togglemode(Arg *arg);  extern void toggletag(Arg *arg); -extern void toggleview(Arg *arg); -extern void view(Arg *arg);  /* util.c */  extern void *emallocz(unsigned int size);  extern void eprint(const char *errstr, ...);  extern void *erealloc(void *ptr, unsigned int size);  extern void spawn(Arg *arg); + +/* view.c */ +extern void dofloat(Arg *arg); +extern void dotile(Arg *arg); +extern void focusnext(Arg *arg); +extern void focusprev(Arg *arg); +extern Bool isvisible(Client *c); +extern void restack(); +extern void togglemode(Arg *arg); +extern void toggleview(Arg *arg); +extern void view(Arg *arg); +extern void zoom(Arg *arg); @@ -30,97 +30,8 @@ RULES  static RReg *rreg = NULL;  static unsigned int len = 0; -void (*arrange)(Arg *) = DEFMODE; -  /* extern */ -void -dofloat(Arg *arg) -{ -	Client *c; - -	for(c = clients; c; c = c->next) { -		c->ismax = False; -		if(isvisible(c)) { -			resize(c, True, TopLeft); -		} -		else -			ban(c); -	} -	if(!sel || !isvisible(sel)) -		sel = getnext(clients); -	if(sel) -		focus(sel); -	else -		XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); -	restack(); -} - -void -dotile(Arg *arg) -{ -	int h, i, n, w; -	Client *c; - -	w = sw - mw; -	for(n = 0, c = clients; c; c = c->next) -		if(isvisible(c) && !c->isfloat) -			n++; - -	if(n > 1) -		h = (sh - bh) / (n - 1); -	else -		h = sh - bh; - -	for(i = 0, c = clients; c; c = c->next) { -		c->ismax = False; -		if(isvisible(c)) { -			if(c->isfloat) { -				resize(c, True, TopLeft); -				continue; -			} -			if(n == 1) { -				c->x = sx; -				c->y = sy + bh; -				c->w = sw - 2; -				c->h = sh - 2 - bh; -			} -			else if(i == 0) { -				c->x = sx; -				c->y = sy + bh; -				c->w = mw - 2; -				c->h = sh - 2 - bh; -			} -			else if(h > bh) { -				c->x = sx + mw; -				c->y = sy + (i - 1) * h + bh; -				c->w = w - 2; -				if(i + 1 == n) -					c->h = sh - c->y - 2; -				else -					c->h = h - 2; -			} -			else { /* fallback if h < bh */ -				c->x = sx + mw; -				c->y = sy + bh; -				c->w = w - 2; -				c->h = sh - 2 - bh; -			} -			resize(c, False, TopLeft); -			i++; -		} -		else -			ban(c); -	} -	if(!sel || !isvisible(sel)) -		sel = getnext(clients); -	if(sel) -		focus(sel); -	else -		XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); -	restack(); -} -  Client *  getnext(Client *c)  { @@ -164,69 +75,6 @@ initrregs()  	}  } -Bool -isvisible(Client *c) -{ -	unsigned int i; - -	for(i = 0; i < ntags; i++) -		if(c->tags[i] && seltag[i]) -			return True; -	return False; -} - -void -restack() -{ -	static unsigned int nwins = 0; -	static Window *wins = NULL; -	unsigned int f, fi, m, mi, n; -	Client *c; -	XEvent ev; - -	for(f = 0, m = 0, c = clients; c; c = c->next) -		if(isvisible(c)) { -			if(c->isfloat || arrange == dofloat) -				f++; -			else -				m++; -		} -	if(!(n = 2 * (f + m))) { -		drawstatus(); -		return; -	} -	if(nwins < n) { -		nwins = n; -		wins = erealloc(wins, nwins * sizeof(Window)); -	} - -	fi = 0; -	mi = 2 * f; -	if(sel->isfloat || arrange == dofloat) { -		wins[fi++] = sel->title; -		wins[fi++] = sel->win; -	} -	else { -		wins[mi++] = sel->title; -		wins[mi++] = sel->win; -	} -	for(c = clients; c; c = c->next) -		if(isvisible(c) && c != sel) { -			if(c->isfloat || arrange == dofloat) { -				wins[fi++] = c->title; -				wins[fi++] = c->win; -			} -			else { -				wins[mi++] = c->title; -				wins[mi++] = c->win; -			} -		} -	XRestackWindows(dpy, wins, n); -	drawall(); -	XSync(dpy, False); -	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); -} -  void  settags(Client *c)  { @@ -277,16 +125,6 @@ tag(Arg *arg)  }  void -togglemode(Arg *arg) -{ -	arrange = arrange == dofloat ? dotile : dofloat; -	if(sel) -		arrange(NULL); -	else -		drawstatus(); -} - -void  toggletag(Arg *arg)  {  	unsigned int i; @@ -302,27 +140,3 @@ toggletag(Arg *arg)  	if(!isvisible(sel))  		arrange(NULL);  } - - -void -toggleview(Arg *arg) -{ -	unsigned int i; - -	seltag[arg->i] = !seltag[arg->i]; -	for(i = 0; i < ntags && !seltag[i]; i++); -	if(i == ntags) -		seltag[arg->i] = True; /* cannot toggle last view */ -	arrange(NULL); -} - -void -view(Arg *arg) -{ -	unsigned int i; - -	for(i = 0; i < ntags; i++) -		seltag[i] = False; -	seltag[arg->i] = True; -	arrange(NULL); -} @@ -0,0 +1,253 @@ +/* + * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com> + * See LICENSE file for license details. + */ +#include "dwm.h" + +/* extern */ + +void (*arrange)(Arg *) = DEFMODE; + +void +dofloat(Arg *arg) +{ +	Client *c; + +	for(c = clients; c; c = c->next) { +		c->ismax = False; +		if(isvisible(c)) { +			resize(c, True, TopLeft); +		} +		else +			ban(c); +	} +	if(!sel || !isvisible(sel)) +		sel = getnext(clients); +	if(sel) +		focus(sel); +	else +		XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); +	restack(); +} + +void +dotile(Arg *arg) +{ +	int h, i, n, w; +	Client *c; + +	w = sw - mw; +	for(n = 0, c = clients; c; c = c->next) +		if(isvisible(c) && !c->isfloat) +			n++; + +	if(n > 1) +		h = (sh - bh) / (n - 1); +	else +		h = sh - bh; + +	for(i = 0, c = clients; c; c = c->next) { +		c->ismax = False; +		if(isvisible(c)) { +			if(c->isfloat) { +				resize(c, True, TopLeft); +				continue; +			} +			if(n == 1) { +				c->x = sx; +				c->y = sy + bh; +				c->w = sw - 2; +				c->h = sh - 2 - bh; +			} +			else if(i == 0) { +				c->x = sx; +				c->y = sy + bh; +				c->w = mw - 2; +				c->h = sh - 2 - bh; +			} +			else if(h > bh) { +				c->x = sx + mw; +				c->y = sy + (i - 1) * h + bh; +				c->w = w - 2; +				if(i + 1 == n) +					c->h = sh - c->y - 2; +				else +					c->h = h - 2; +			} +			else { /* fallback if h < bh */ +				c->x = sx + mw; +				c->y = sy + bh; +				c->w = w - 2; +				c->h = sh - 2 - bh; +			} +			resize(c, False, TopLeft); +			i++; +		} +		else +			ban(c); +	} +	if(!sel || !isvisible(sel)) +		sel = getnext(clients); +	if(sel) +		focus(sel); +	else +		XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); +	restack(); +} + +void +focusnext(Arg *arg) +{ +	Client *c; +    +	if(!sel) +		return; + +	if(!(c = getnext(sel->next))) +		c = getnext(clients); +	if(c) { +		focus(c); +		restack(); +	} +} + +void +focusprev(Arg *arg) +{ +	Client *c; + +	if(!sel) +		return; + +	if(!(c = getprev(sel->prev))) { +		for(c = clients; c && c->next; c = c->next); +		c = getprev(c); +	} +	if(c) { +		focus(c); +		restack(); +	} +} + +Bool +isvisible(Client *c) +{ +	unsigned int i; + +	for(i = 0; i < ntags; i++) +		if(c->tags[i] && seltag[i]) +			return True; +	return False; +} + +void +restack() +{ +	static unsigned int nwins = 0; +	static Window *wins = NULL; +	unsigned int f, fi, m, mi, n; +	Client *c; +	XEvent ev; + +	for(f = 0, m = 0, c = clients; c; c = c->next) +		if(isvisible(c)) { +			if(c->isfloat || arrange == dofloat) +				f++; +			else +				m++; +		} +	if(!(n = 2 * (f + m))) { +		drawstatus(); +		return; +	} +	if(nwins < n) { +		nwins = n; +		wins = erealloc(wins, nwins * sizeof(Window)); +	} + +	fi = 0; +	mi = 2 * f; +	if(sel->isfloat || arrange == dofloat) { +		wins[fi++] = sel->title; +		wins[fi++] = sel->win; +	} +	else { +		wins[mi++] = sel->title; +		wins[mi++] = sel->win; +	} +	for(c = clients; c; c = c->next) +		if(isvisible(c) && c != sel) { +			if(c->isfloat || arrange == dofloat) { +				wins[fi++] = c->title; +				wins[fi++] = c->win; +			} +			else { +				wins[mi++] = c->title; +				wins[mi++] = c->win; +			} +		} +	XRestackWindows(dpy, wins, n); +	drawall(); +	XSync(dpy, False); +	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); +} + +void +togglemode(Arg *arg) +{ +	arrange = arrange == dofloat ? dotile : dofloat; +	if(sel) +		arrange(NULL); +	else +		drawstatus(); +} + +void +toggleview(Arg *arg) +{ +	unsigned int i; + +	seltag[arg->i] = !seltag[arg->i]; +	for(i = 0; i < ntags && !seltag[i]; i++); +	if(i == ntags) +		seltag[arg->i] = True; /* cannot toggle last view */ +	arrange(NULL); +} + +void +view(Arg *arg) +{ +	unsigned int i; + +	for(i = 0; i < ntags; i++) +		seltag[i] = False; +	seltag[arg->i] = True; +	arrange(NULL); +} + +void +zoom(Arg *arg) +{ +	Client *c; + +	if(!sel || (arrange != dotile) || sel->isfloat || sel->ismax) +		return; + +	if(sel == getnext(clients))  { +		if((c = getnext(sel->next))) +			sel = c; +		else +			return; +	} + +	/* pop */ +	sel->prev->next = sel->next; +	if(sel->next) +		sel->next->prev = sel->prev; +	sel->prev = NULL; +	clients->prev = sel; +	sel->next = clients; +	clients = sel; +	focus(sel); +	arrange(NULL); +} | 
