| tsplit screen.c into layout.c and tag.c (because the view is an implicit mixtur… | |
| git clone git://src.adamsgaard.dk/dwm | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| commit 8012fcf3334148d2b39646fd372a7514cc74c250 | |
| parent 6bc4556ebd7f48f52f9a446e53d1705d8fd79b27 | |
| Author: Anselm R. Garbe <[email protected]> | |
| Date: Tue, 20 Feb 2007 10:49:53 +0100 | |
| split screen.c into layout.c and tag.c (because the view is an implicit mixture… | |
| Diffstat: | |
| M Makefile | 2 +- | |
| M dwm.h | 18 ++++++++++-------- | |
| A layout.c | 185 ++++++++++++++++++++++++++++++ | |
| D screen.c | 328 -----------------------------… | |
| A tag.c | 149 +++++++++++++++++++++++++++++… | |
| 5 files changed, 345 insertions(+), 337 deletions(-) | |
| --- | |
| diff --git a/Makefile b/Makefile | |
| t@@ -3,7 +3,7 @@ | |
| include config.mk | |
| -SRC = client.c event.c main.c screen.c util.c | |
| +SRC = client.c event.c layout.c main.c tag.c util.c | |
| OBJ = ${SRC:.c=.o} | |
| all: options dwm | |
| diff --git a/dwm.h b/dwm.h | |
| t@@ -120,6 +120,15 @@ extern void zoom(Arg *arg); /* zoo… | |
| /* event.c */ | |
| extern void grabkeys(void); /* grab all keys defined in… | |
| +/* layout.c */ | |
| +extern void incnmaster(Arg *arg); /* increments nmaster with ar… | |
| +extern void initlayouts(void); /* initialize layout arr… | |
| +extern void resizemaster(Arg *arg); /* resizes the master perce… | |
| +extern void restack(void); /* restores z layers of all … | |
| +extern void setlayout(Arg *arg); /* sets layout, -1 toggles */ | |
| +extern void toggleversatile(Arg *arg); /* toggles focusesd clie… | |
| +extern void versatile(void); /* arranges all windows ve… | |
| + | |
| /* main.c */ | |
| extern void drawstatus(void); /* draw the bar */ | |
| extern unsigned int textw(const char *text); /* return the width of tex… | |
| t@@ -127,20 +136,13 @@ extern void quit(Arg *arg); /* qu… | |
| extern void sendevent(Window w, Atom a, long value); /* send synthetic … | |
| extern int xerror(Display *dsply, XErrorEvent *ee); /* dwm's X error ha… | |
| -/* screen.c */ | |
| +/* tag.c */ | |
| extern void compileregs(void); /* initialize regexps of… | |
| -extern void incnmaster(Arg *arg); /* increments nmaster with ar… | |
| -extern void initlayouts(void); /* initialize layout arr… | |
| extern Bool isvisible(Client *c); /* returns True if client is … | |
| -extern void resizemaster(Arg *arg); /* resizes the master perce… | |
| -extern void restack(void); /* restores z layers of all … | |
| -extern void setlayout(Arg *arg); /* sets layout, -1 toggles */ | |
| extern void settags(Client *c, Client *trans); /* sets tags of c */ | |
| extern void tag(Arg *arg); /* tags c with arg's index */ | |
| -extern void toggleversatile(Arg *arg); /* toggles focusesd clie… | |
| extern void toggletag(Arg *arg); /* toggles c tags with arg's i… | |
| extern void toggleview(Arg *arg); /* toggles the tag with arg's… | |
| -extern void versatile(void); /* arranges all windows ve… | |
| extern void view(Arg *arg); /* views the tag with arg's… | |
| /* util.c */ | |
| diff --git a/layout.c b/layout.c | |
| t@@ -0,0 +1,185 @@ | |
| +/* (C)opyright MMVI-MMVII Anselm R. Garbe <garbeam at gmail dot com> | |
| + * See LICENSE file for license details. | |
| + */ | |
| +#include "dwm.h" | |
| + | |
| +unsigned int master = MASTER; | |
| +unsigned int nmaster = NMASTER; | |
| +unsigned int blw = 0; | |
| +Layout *lt = NULL; | |
| + | |
| +/* static */ | |
| + | |
| +static unsigned int nlayouts = 0; | |
| + | |
| +static void | |
| +tile(void) { | |
| + unsigned int i, n, nx, ny, nw, nh, mw, mh, tw, th; | |
| + Client *c; | |
| + | |
| + for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next)) | |
| + n++; | |
| + /* window geoms */ | |
| + mh = (n > nmaster) ? wah / nmaster : wah / (n > 0 ? n : 1); | |
| + mw = (n > nmaster) ? (waw * master) / 1000 : waw; | |
| + th = (n > nmaster) ? wah / (n - nmaster) : 0; | |
| + tw = waw - mw; | |
| + | |
| + for(i = 0, c = clients; c; c = c->next) | |
| + if(isvisible(c)) { | |
| + if(c->isbanned) | |
| + XMoveWindow(dpy, c->win, c->x, c->y); | |
| + c->isbanned = False; | |
| + if(c->isversatile) | |
| + continue; | |
| + c->ismax = False; | |
| + nx = wax; | |
| + ny = way; | |
| + if(i < nmaster) { | |
| + ny += i * mh; | |
| + nw = mw - 2 * BORDERPX; | |
| + nh = mh - 2 * BORDERPX; | |
| + } | |
| + else { /* tile window */ | |
| + nx += mw; | |
| + nw = tw - 2 * BORDERPX; | |
| + if(th > 2 * BORDERPX) { | |
| + ny += (i - nmaster) * th; | |
| + nh = th - 2 * BORDERPX; | |
| + } | |
| + else /* fallback if th <= 2 * BORDERPX */ | |
| + nh = wah - 2 * BORDERPX; | |
| + } | |
| + resize(c, nx, ny, nw, nh, False); | |
| + i++; | |
| + } | |
| + else { | |
| + c->isbanned = True; | |
| + XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); | |
| + } | |
| + if(!sel || !isvisible(sel)) { | |
| + for(c = stack; c && !isvisible(c); c = c->snext); | |
| + focus(c); | |
| + } | |
| + restack(); | |
| +} | |
| + | |
| +LAYOUTS | |
| + | |
| +/* extern */ | |
| + | |
| +void | |
| +incnmaster(Arg *arg) { | |
| + if((lt->arrange != tile) || (nmaster + arg->i < 1) | |
| + || (wah / (nmaster + arg->i) <= 2 * BORDERPX)) | |
| + return; | |
| + nmaster += arg->i; | |
| + if(sel) | |
| + lt->arrange(); | |
| + else | |
| + drawstatus(); | |
| +} | |
| + | |
| +void | |
| +initlayouts(void) { | |
| + unsigned int i, w; | |
| + | |
| + lt = &layout[0]; | |
| + nlayouts = sizeof layout / sizeof layout[0]; | |
| + for(blw = i = 0; i < nlayouts; i++) { | |
| + w = textw(layout[i].symbol); | |
| + if(w > blw) | |
| + blw = w; | |
| + } | |
| +} | |
| + | |
| +void | |
| +resizemaster(Arg *arg) { | |
| + if(lt->arrange != tile) | |
| + return; | |
| + if(arg->i == 0) | |
| + master = MASTER; | |
| + else { | |
| + if(waw * (master + arg->i) / 1000 >= waw - 2 * BORDERPX | |
| + || waw * (master + arg->i) / 1000 <= 2 * BORDERPX) | |
| + return; | |
| + master += arg->i; | |
| + } | |
| + lt->arrange(); | |
| +} | |
| + | |
| +void | |
| +restack(void) { | |
| + Client *c; | |
| + XEvent ev; | |
| + | |
| + drawstatus(); | |
| + if(!sel) | |
| + return; | |
| + if(sel->isversatile || lt->arrange == versatile) | |
| + XRaiseWindow(dpy, sel->win); | |
| + if(lt->arrange != versatile) { | |
| + if(!sel->isversatile) | |
| + XLowerWindow(dpy, sel->win); | |
| + for(c = nexttiled(clients); c; c = nexttiled(c->next)) { | |
| + if(c == sel) | |
| + continue; | |
| + XLowerWindow(dpy, c->win); | |
| + } | |
| + } | |
| + XSync(dpy, False); | |
| + while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | |
| +} | |
| + | |
| +void | |
| +setlayout(Arg *arg) { | |
| + unsigned int i; | |
| + | |
| + if(arg->i == -1) { | |
| + for(i = 0; i < nlayouts && lt != &layout[i]; i++); | |
| + if(i == nlayouts - 1) | |
| + lt = &layout[0]; | |
| + else | |
| + lt = &layout[++i]; | |
| + } | |
| + else { | |
| + if(arg->i < 0 || arg->i >= nlayouts) | |
| + return; | |
| + lt = &layout[arg->i]; | |
| + } | |
| + if(sel) | |
| + lt->arrange(); | |
| + else | |
| + drawstatus(); | |
| +} | |
| + | |
| +void | |
| +toggleversatile(Arg *arg) { | |
| + if(!sel || lt->arrange == versatile) | |
| + return; | |
| + sel->isversatile = !sel->isversatile; | |
| + lt->arrange(); | |
| +} | |
| + | |
| +void | |
| +versatile(void) { | |
| + Client *c; | |
| + | |
| + for(c = clients; c; c = c->next) { | |
| + if(isvisible(c)) { | |
| + if(c->isbanned) | |
| + XMoveWindow(dpy, c->win, c->x, c->y); | |
| + c->isbanned = False; | |
| + resize(c, c->x, c->y, c->w, c->h, True); | |
| + } | |
| + else { | |
| + c->isbanned = True; | |
| + XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); | |
| + } | |
| + } | |
| + if(!sel || !isvisible(sel)) { | |
| + for(c = stack; c && !isvisible(c); c = c->snext); | |
| + focus(c); | |
| + } | |
| + restack(); | |
| +} | |
| diff --git a/screen.c b/screen.c | |
| t@@ -1,328 +0,0 @@ | |
| -/* (C)opyright MMVI-MMVII Anselm R. Garbe <garbeam at gmail dot com> | |
| - * See LICENSE file for license details. | |
| - */ | |
| -#include "dwm.h" | |
| -#include <regex.h> | |
| -#include <stdio.h> | |
| -#include <stdlib.h> | |
| -#include <string.h> | |
| -#include <sys/types.h> | |
| -#include <X11/Xutil.h> | |
| - | |
| -unsigned int master = MASTER; | |
| -unsigned int nmaster = NMASTER; | |
| -unsigned int blw = 0; | |
| -Layout *lt = NULL; | |
| - | |
| -/* static */ | |
| - | |
| -typedef struct { | |
| - const char *prop; | |
| - const char *tags; | |
| - Bool isversatile; | |
| -} Rule; | |
| - | |
| -typedef struct { | |
| - regex_t *propregex; | |
| - regex_t *tagregex; | |
| -} Regs; | |
| - | |
| -TAGS | |
| -RULES | |
| - | |
| -static Regs *regs = NULL; | |
| -static unsigned int nrules = 0; | |
| -static unsigned int nlayouts = 0; | |
| - | |
| -static void | |
| -tile(void) { | |
| - unsigned int i, n, nx, ny, nw, nh, mw, mh, tw, th; | |
| - Client *c; | |
| - | |
| - for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next)) | |
| - n++; | |
| - /* window geoms */ | |
| - mh = (n > nmaster) ? wah / nmaster : wah / (n > 0 ? n : 1); | |
| - mw = (n > nmaster) ? (waw * master) / 1000 : waw; | |
| - th = (n > nmaster) ? wah / (n - nmaster) : 0; | |
| - tw = waw - mw; | |
| - | |
| - for(i = 0, c = clients; c; c = c->next) | |
| - if(isvisible(c)) { | |
| - if(c->isbanned) | |
| - XMoveWindow(dpy, c->win, c->x, c->y); | |
| - c->isbanned = False; | |
| - if(c->isversatile) | |
| - continue; | |
| - c->ismax = False; | |
| - nx = wax; | |
| - ny = way; | |
| - if(i < nmaster) { | |
| - ny += i * mh; | |
| - nw = mw - 2 * BORDERPX; | |
| - nh = mh - 2 * BORDERPX; | |
| - } | |
| - else { /* tile window */ | |
| - nx += mw; | |
| - nw = tw - 2 * BORDERPX; | |
| - if(th > 2 * BORDERPX) { | |
| - ny += (i - nmaster) * th; | |
| - nh = th - 2 * BORDERPX; | |
| - } | |
| - else /* fallback if th <= 2 * BORDERPX */ | |
| - nh = wah - 2 * BORDERPX; | |
| - } | |
| - resize(c, nx, ny, nw, nh, False); | |
| - i++; | |
| - } | |
| - else { | |
| - c->isbanned = True; | |
| - XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); | |
| - } | |
| - if(!sel || !isvisible(sel)) { | |
| - for(c = stack; c && !isvisible(c); c = c->snext); | |
| - focus(c); | |
| - } | |
| - restack(); | |
| -} | |
| - | |
| -LAYOUTS | |
| - | |
| -/* extern */ | |
| - | |
| -void | |
| -compileregs(void) { | |
| - unsigned int i; | |
| - regex_t *reg; | |
| - | |
| - if(regs) | |
| - return; | |
| - nrules = sizeof rule / sizeof rule[0]; | |
| - regs = emallocz(nrules * sizeof(Regs)); | |
| - for(i = 0; i < nrules; i++) { | |
| - if(rule[i].prop) { | |
| - reg = emallocz(sizeof(regex_t)); | |
| - if(regcomp(reg, rule[i].prop, REG_EXTENDED)) | |
| - free(reg); | |
| - else | |
| - regs[i].propregex = reg; | |
| - } | |
| - if(rule[i].tags) { | |
| - reg = emallocz(sizeof(regex_t)); | |
| - if(regcomp(reg, rule[i].tags, REG_EXTENDED)) | |
| - free(reg); | |
| - else | |
| - regs[i].tagregex = reg; | |
| - } | |
| - } | |
| -} | |
| - | |
| -void | |
| -incnmaster(Arg *arg) { | |
| - if((lt->arrange != tile) || (nmaster + arg->i < 1) | |
| - || (wah / (nmaster + arg->i) <= 2 * BORDERPX)) | |
| - return; | |
| - nmaster += arg->i; | |
| - if(sel) | |
| - lt->arrange(); | |
| - else | |
| - drawstatus(); | |
| -} | |
| - | |
| -void | |
| -initlayouts(void) { | |
| - unsigned int i, w; | |
| - | |
| - lt = &layout[0]; | |
| - nlayouts = sizeof layout / sizeof layout[0]; | |
| - for(blw = i = 0; i < nlayouts; i++) { | |
| - w = textw(layout[i].symbol); | |
| - if(w > blw) | |
| - blw = w; | |
| - } | |
| -} | |
| - | |
| -Bool | |
| -isvisible(Client *c) { | |
| - unsigned int i; | |
| - | |
| - for(i = 0; i < ntags; i++) | |
| - if(c->tags[i] && seltag[i]) | |
| - return True; | |
| - return False; | |
| -} | |
| - | |
| -void | |
| -resizemaster(Arg *arg) { | |
| - if(lt->arrange != tile) | |
| - return; | |
| - if(arg->i == 0) | |
| - master = MASTER; | |
| - else { | |
| - if(waw * (master + arg->i) / 1000 >= waw - 2 * BORDERPX | |
| - || waw * (master + arg->i) / 1000 <= 2 * BORDERPX) | |
| - return; | |
| - master += arg->i; | |
| - } | |
| - lt->arrange(); | |
| -} | |
| - | |
| -void | |
| -restack(void) { | |
| - Client *c; | |
| - XEvent ev; | |
| - | |
| - drawstatus(); | |
| - if(!sel) | |
| - return; | |
| - if(sel->isversatile || lt->arrange == versatile) | |
| - XRaiseWindow(dpy, sel->win); | |
| - if(lt->arrange != versatile) { | |
| - if(!sel->isversatile) | |
| - XLowerWindow(dpy, sel->win); | |
| - for(c = nexttiled(clients); c; c = nexttiled(c->next)) { | |
| - if(c == sel) | |
| - continue; | |
| - XLowerWindow(dpy, c->win); | |
| - } | |
| - } | |
| - XSync(dpy, False); | |
| - while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | |
| -} | |
| - | |
| -void | |
| -setlayout(Arg *arg) { | |
| - unsigned int i; | |
| - | |
| - if(arg->i == -1) { | |
| - for(i = 0; i < nlayouts && lt != &layout[i]; i++); | |
| - if(i == nlayouts - 1) | |
| - lt = &layout[0]; | |
| - else | |
| - lt = &layout[++i]; | |
| - } | |
| - else { | |
| - if(arg->i < 0 || arg->i >= nlayouts) | |
| - return; | |
| - lt = &layout[arg->i]; | |
| - } | |
| - if(sel) | |
| - lt->arrange(); | |
| - else | |
| - drawstatus(); | |
| -} | |
| - | |
| -void | |
| -settags(Client *c, Client *trans) { | |
| - char prop[512]; | |
| - unsigned int i, j; | |
| - regmatch_t tmp; | |
| - Bool matched = trans != NULL; | |
| - XClassHint ch = { 0 }; | |
| - | |
| - if(matched) | |
| - for(i = 0; i < ntags; i++) | |
| - c->tags[i] = trans->tags[i]; | |
| - else { | |
| - XGetClassHint(dpy, c->win, &ch); | |
| - snprintf(prop, sizeof prop, "%s:%s:%s", | |
| - ch.res_class ? ch.res_class : "", | |
| - ch.res_name ? ch.res_name : "", c->name); | |
| - for(i = 0; i < nrules; i++) | |
| - if(regs[i].propregex && !regexec(regs[i].propregex, pr… | |
| - c->isversatile = rule[i].isversatile; | |
| - for(j = 0; regs[i].tagregex && j < ntags; j++)… | |
| - if(!regexec(regs[i].tagregex, tags[j],… | |
| - matched = True; | |
| - c->tags[j] = True; | |
| - } | |
| - } | |
| - } | |
| - if(ch.res_class) | |
| - XFree(ch.res_class); | |
| - if(ch.res_name) | |
| - XFree(ch.res_name); | |
| - } | |
| - if(!matched) | |
| - for(i = 0; i < ntags; i++) | |
| - c->tags[i] = seltag[i]; | |
| -} | |
| - | |
| -void | |
| -tag(Arg *arg) { | |
| - unsigned int i; | |
| - | |
| - if(!sel) | |
| - return; | |
| - for(i = 0; i < ntags; i++) | |
| - sel->tags[i] = (arg->i == -1) ? True : False; | |
| - if(arg->i >= 0 && arg->i < ntags) | |
| - sel->tags[arg->i] = True; | |
| - lt->arrange(); | |
| -} | |
| - | |
| -void | |
| -toggletag(Arg *arg) { | |
| - unsigned int i; | |
| - | |
| - if(!sel) | |
| - return; | |
| - sel->tags[arg->i] = !sel->tags[arg->i]; | |
| - for(i = 0; i < ntags && !sel->tags[i]; i++); | |
| - if(i == ntags) | |
| - sel->tags[arg->i] = True; | |
| - lt->arrange(); | |
| -} | |
| - | |
| -void | |
| -toggleversatile(Arg *arg) { | |
| - if(!sel || lt->arrange == versatile) | |
| - return; | |
| - sel->isversatile = !sel->isversatile; | |
| - lt->arrange(); | |
| -} | |
| - | |
| -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 */ | |
| - lt->arrange(); | |
| -} | |
| - | |
| -void | |
| -versatile(void) { | |
| - Client *c; | |
| - | |
| - for(c = clients; c; c = c->next) { | |
| - if(isvisible(c)) { | |
| - if(c->isbanned) | |
| - XMoveWindow(dpy, c->win, c->x, c->y); | |
| - c->isbanned = False; | |
| - resize(c, c->x, c->y, c->w, c->h, True); | |
| - } | |
| - else { | |
| - c->isbanned = True; | |
| - XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); | |
| - } | |
| - } | |
| - if(!sel || !isvisible(sel)) { | |
| - for(c = stack; c && !isvisible(c); c = c->snext); | |
| - focus(c); | |
| - } | |
| - restack(); | |
| -} | |
| - | |
| -void | |
| -view(Arg *arg) { | |
| - unsigned int i; | |
| - | |
| - for(i = 0; i < ntags; i++) | |
| - seltag[i] = (arg->i == -1) ? True : False; | |
| - if(arg->i >= 0 && arg->i < ntags) | |
| - seltag[arg->i] = True; | |
| - lt->arrange(); | |
| -} | |
| diff --git a/tag.c b/tag.c | |
| t@@ -0,0 +1,149 @@ | |
| +/* (C)opyright MMVI-MMVII Anselm R. Garbe <garbeam at gmail dot com> | |
| + * See LICENSE file for license details. | |
| + */ | |
| +#include "dwm.h" | |
| +#include <regex.h> | |
| +#include <stdio.h> | |
| +#include <X11/Xutil.h> | |
| + | |
| +/* static */ | |
| + | |
| +typedef struct { | |
| + const char *prop; | |
| + const char *tags; | |
| + Bool isversatile; | |
| +} Rule; | |
| + | |
| +typedef struct { | |
| + regex_t *propregex; | |
| + regex_t *tagregex; | |
| +} Regs; | |
| + | |
| +TAGS | |
| +RULES | |
| + | |
| +static Regs *regs = NULL; | |
| +static unsigned int nrules = 0; | |
| + | |
| +/* extern */ | |
| + | |
| +void | |
| +compileregs(void) { | |
| + unsigned int i; | |
| + regex_t *reg; | |
| + | |
| + if(regs) | |
| + return; | |
| + nrules = sizeof rule / sizeof rule[0]; | |
| + regs = emallocz(nrules * sizeof(Regs)); | |
| + for(i = 0; i < nrules; i++) { | |
| + if(rule[i].prop) { | |
| + reg = emallocz(sizeof(regex_t)); | |
| + if(regcomp(reg, rule[i].prop, REG_EXTENDED)) | |
| + free(reg); | |
| + else | |
| + regs[i].propregex = reg; | |
| + } | |
| + if(rule[i].tags) { | |
| + reg = emallocz(sizeof(regex_t)); | |
| + if(regcomp(reg, rule[i].tags, REG_EXTENDED)) | |
| + free(reg); | |
| + else | |
| + regs[i].tagregex = reg; | |
| + } | |
| + } | |
| +} | |
| + | |
| +Bool | |
| +isvisible(Client *c) { | |
| + unsigned int i; | |
| + | |
| + for(i = 0; i < ntags; i++) | |
| + if(c->tags[i] && seltag[i]) | |
| + return True; | |
| + return False; | |
| +} | |
| + | |
| +void | |
| +settags(Client *c, Client *trans) { | |
| + char prop[512]; | |
| + unsigned int i, j; | |
| + regmatch_t tmp; | |
| + Bool matched = trans != NULL; | |
| + XClassHint ch = { 0 }; | |
| + | |
| + if(matched) | |
| + for(i = 0; i < ntags; i++) | |
| + c->tags[i] = trans->tags[i]; | |
| + else { | |
| + XGetClassHint(dpy, c->win, &ch); | |
| + snprintf(prop, sizeof prop, "%s:%s:%s", | |
| + ch.res_class ? ch.res_class : "", | |
| + ch.res_name ? ch.res_name : "", c->name); | |
| + for(i = 0; i < nrules; i++) | |
| + if(regs[i].propregex && !regexec(regs[i].propregex, pr… | |
| + c->isversatile = rule[i].isversatile; | |
| + for(j = 0; regs[i].tagregex && j < ntags; j++)… | |
| + if(!regexec(regs[i].tagregex, tags[j],… | |
| + matched = True; | |
| + c->tags[j] = True; | |
| + } | |
| + } | |
| + } | |
| + if(ch.res_class) | |
| + XFree(ch.res_class); | |
| + if(ch.res_name) | |
| + XFree(ch.res_name); | |
| + } | |
| + if(!matched) | |
| + for(i = 0; i < ntags; i++) | |
| + c->tags[i] = seltag[i]; | |
| +} | |
| + | |
| +void | |
| +tag(Arg *arg) { | |
| + unsigned int i; | |
| + | |
| + if(!sel) | |
| + return; | |
| + for(i = 0; i < ntags; i++) | |
| + sel->tags[i] = (arg->i == -1) ? True : False; | |
| + if(arg->i >= 0 && arg->i < ntags) | |
| + sel->tags[arg->i] = True; | |
| + lt->arrange(); | |
| +} | |
| + | |
| +void | |
| +toggletag(Arg *arg) { | |
| + unsigned int i; | |
| + | |
| + if(!sel) | |
| + return; | |
| + sel->tags[arg->i] = !sel->tags[arg->i]; | |
| + for(i = 0; i < ntags && !sel->tags[i]; i++); | |
| + if(i == ntags) | |
| + sel->tags[arg->i] = True; | |
| + lt->arrange(); | |
| +} | |
| + | |
| +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 */ | |
| + lt->arrange(); | |
| +} | |
| + | |
| +void | |
| +view(Arg *arg) { | |
| + unsigned int i; | |
| + | |
| + for(i = 0; i < ntags; i++) | |
| + seltag[i] = (arg->i == -1) ? True : False; | |
| + if(arg->i >= 0 && arg->i < ntags) | |
| + seltag[arg->i] = True; | |
| + lt->arrange(); | |
| +} |