78 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| void
 | |
| removescratch(const Arg *arg)
 | |
| {
 | |
| 	Client *c = selmon->sel;
 | |
| 	if (!c)
 | |
| 		return;
 | |
| 	unsigned int scratchtag = SPTAG(arg->ui);
 | |
| 	c->tags = c->mon->tagset[c->mon->seltags] ^ scratchtag;
 | |
| 	arrange(c->mon);
 | |
| }
 | |
| 
 | |
| void
 | |
| setscratch(const Arg *arg)
 | |
| {
 | |
| 	Client *c = selmon->sel;
 | |
| 	if (!c)
 | |
| 		return;
 | |
| 	unsigned int scratchtag = SPTAG(arg->ui);
 | |
| 	c->tags = scratchtag;
 | |
| 	arrange(c->mon);
 | |
| }
 | |
| 
 | |
| void
 | |
| togglescratch(const Arg *arg)
 | |
| {
 | |
| 	Client *c = NULL, *next = NULL, *found = NULL;
 | |
| 	Monitor *mon;
 | |
| 	unsigned int scratchtag = SPTAG(arg->ui);
 | |
| 	unsigned int newtagset = 0;
 | |
| 	int nh = 0, nw = 0;
 | |
| 	Arg sparg = {.v = scratchpads[arg->ui].cmd};
 | |
| 
 | |
| 	for (mon = mons; mon; mon = mon->next) {
 | |
| 		for (c = mon->clients; c; c = next) {
 | |
| 			next = c->next;
 | |
| 			if (!(c->tags & scratchtag))
 | |
| 				continue;
 | |
| 
 | |
| 			found = c;
 | |
| 
 | |
| 			if (HIDDEN(c)) {
 | |
| 				XMapWindow(dpy, c->win);
 | |
| 				setclientstate(c, NormalState);
 | |
| 				newtagset = 0;
 | |
| 			} else
 | |
| 				newtagset = selmon->tagset[selmon->seltags] ^ scratchtag;
 | |
| 
 | |
| 			if (c->mon != selmon) {
 | |
| 				if (c->mon->tagset[c->mon->seltags] & SPTAGMASK)
 | |
| 					c->mon->tagset[c->mon->seltags] ^= scratchtag;
 | |
| 				if (c->w > selmon->ww)
 | |
| 					nw = selmon->ww - c->bw * 2;
 | |
| 				if (c->h > selmon->wh)
 | |
| 					nh = selmon->wh - c->bw * 2;
 | |
| 				if (nw > 0 || nh > 0)
 | |
| 					resizeclient(c, c->x, c->y, nw ? nw : c->w, nh ? nh : c->h);
 | |
| 				sendmon(c, selmon);
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	if (found) {
 | |
| 		if (newtagset) {
 | |
| 			selmon->tagset[selmon->seltags] = newtagset;
 | |
| 			arrange(selmon);
 | |
| 			focus(NULL);
 | |
| 		}
 | |
| 		if (ISVISIBLE(found)) {
 | |
| 			focus(found);
 | |
| 			restack(selmon);
 | |
| 		}
 | |
| 	} else {
 | |
| 		selmon->tagset[selmon->seltags] |= scratchtag;
 | |
| 		spawn(&sparg);
 | |
| 	}
 | |
| }
 | |
| 
 |