separated several functions into view.c
This commit is contained in:
		
							parent
							
								
									595028614b
								
							
						
					
					
						commit
						aa13727067
					
				
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @ -3,7 +3,7 @@ | |||||||
| 
 | 
 | ||||||
| include config.mk | 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} | OBJ = ${SRC:.c=.o} | ||||||
| 
 | 
 | ||||||
| all: options dwm | all: options dwm | ||||||
|  | |||||||
							
								
								
									
										61
									
								
								client.c
									
									
									
									
									
								
							
							
						
						
									
										61
									
								
								client.c
									
									
									
									
									
								
							| @ -89,40 +89,6 @@ focus(Client *c) | |||||||
| 	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); | 	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 * | Client * | ||||||
| getclient(Window w) | getclient(Window w) | ||||||
| { | { | ||||||
| @ -446,30 +412,3 @@ unmanage(Client *c) | |||||||
| 		focus(sel); | 		focus(sel); | ||||||
| 	arrange(NULL); | 	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); |  | ||||||
| } |  | ||||||
|  | |||||||
							
								
								
									
										22
									
								
								dwm.h
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								dwm.h
									
									
									
									
									
								
							| @ -84,8 +84,6 @@ extern Window root, barwin; | |||||||
| /* client.c */ | /* client.c */ | ||||||
| extern void ban(Client *c); | extern void ban(Client *c); | ||||||
| extern void focus(Client *c); | extern void focus(Client *c); | ||||||
| extern void focusnext(Arg *arg); |  | ||||||
| extern void focusprev(Arg *arg); |  | ||||||
| extern Client *getclient(Window w); | extern Client *getclient(Window w); | ||||||
| extern Client *getctitle(Window w); | extern Client *getctitle(Window w); | ||||||
| extern void gravitate(Client *c, Bool invert); | extern void gravitate(Client *c, Bool invert); | ||||||
| @ -96,7 +94,6 @@ extern void setsize(Client *c); | |||||||
| extern void settitle(Client *c); | extern void settitle(Client *c); | ||||||
| extern void togglemax(Arg *arg); | extern void togglemax(Arg *arg); | ||||||
| extern void unmanage(Client *c); | extern void unmanage(Client *c); | ||||||
| extern void zoom(Arg *arg); |  | ||||||
| 
 | 
 | ||||||
| /* draw.c */ | /* draw.c */ | ||||||
| extern void drawall(); | extern void drawall(); | ||||||
| @ -117,22 +114,27 @@ extern void sendevent(Window w, Atom a, long value); | |||||||
| extern int xerror(Display *dsply, XErrorEvent *ee); | extern int xerror(Display *dsply, XErrorEvent *ee); | ||||||
| 
 | 
 | ||||||
| /* tag.c */ | /* tag.c */ | ||||||
| extern void dofloat(Arg *arg); |  | ||||||
| extern void dotile(Arg *arg); |  | ||||||
| extern void initrregs(); | extern void initrregs(); | ||||||
| extern Bool isvisible(Client *c); |  | ||||||
| extern Client *getnext(Client *c); | extern Client *getnext(Client *c); | ||||||
| extern Client *getprev(Client *c); | extern Client *getprev(Client *c); | ||||||
| extern void restack(); |  | ||||||
| extern void settags(Client *c); | extern void settags(Client *c); | ||||||
| extern void tag(Arg *arg); | extern void tag(Arg *arg); | ||||||
| extern void togglemode(Arg *arg); |  | ||||||
| extern void toggletag(Arg *arg); | extern void toggletag(Arg *arg); | ||||||
| extern void toggleview(Arg *arg); |  | ||||||
| extern void view(Arg *arg); |  | ||||||
| 
 | 
 | ||||||
| /* util.c */ | /* util.c */ | ||||||
| extern void *emallocz(unsigned int size); | extern void *emallocz(unsigned int size); | ||||||
| extern void eprint(const char *errstr, ...); | extern void eprint(const char *errstr, ...); | ||||||
| extern void *erealloc(void *ptr, unsigned int size); | extern void *erealloc(void *ptr, unsigned int size); | ||||||
| extern void spawn(Arg *arg); | 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); | ||||||
|  | |||||||
							
								
								
									
										186
									
								
								tag.c
									
									
									
									
									
								
							
							
						
						
									
										186
									
								
								tag.c
									
									
									
									
									
								
							| @ -30,97 +30,8 @@ RULES | |||||||
| static RReg *rreg = NULL; | static RReg *rreg = NULL; | ||||||
| static unsigned int len = 0; | static unsigned int len = 0; | ||||||
| 
 | 
 | ||||||
| void (*arrange)(Arg *) = DEFMODE; |  | ||||||
| 
 |  | ||||||
| /* extern */ | /* 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 * | Client * | ||||||
| getnext(Client *c) | 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 | void | ||||||
| settags(Client *c) | settags(Client *c) | ||||||
| { | { | ||||||
| @ -276,16 +124,6 @@ tag(Arg *arg) | |||||||
| 		arrange(NULL); | 		arrange(NULL); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void |  | ||||||
| togglemode(Arg *arg) |  | ||||||
| { |  | ||||||
| 	arrange = arrange == dofloat ? dotile : dofloat; |  | ||||||
| 	if(sel) |  | ||||||
| 		arrange(NULL); |  | ||||||
| 	else |  | ||||||
| 		drawstatus(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void | void | ||||||
| toggletag(Arg *arg) | toggletag(Arg *arg) | ||||||
| { | { | ||||||
| @ -302,27 +140,3 @@ toggletag(Arg *arg) | |||||||
| 	if(!isvisible(sel)) | 	if(!isvisible(sel)) | ||||||
| 		arrange(NULL); | 		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); |  | ||||||
| } |  | ||||||
|  | |||||||
							
								
								
									
										253
									
								
								view.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										253
									
								
								view.c
									
									
									
									
									
										Normal file
									
								
							| @ -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); | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Anselm R. Garbe
						Anselm R. Garbe