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(); | |
+} |