trenamed view.c into screen.c - dwm - [fork] customized build of dwm, the dynam… | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 238dd5d2b15b8bdc0f05d5be7f86a1ca03d2920b | |
parent 64871a7045077bb2ec4cbcd62a74cabbe6b45096 | |
Author: Anselm R. Garbe <[email protected]> | |
Date: Mon, 19 Feb 2007 15:05:29 +0100 | |
renamed view.c into screen.c | |
Diffstat: | |
M Makefile | 2 +- | |
M client.c | 73 +++++++++++++++++++++++++----… | |
M dwm.h | 10 ++++------ | |
A screen.c | 297 +++++++++++++++++++++++++++++… | |
D view.c | 344 ------------------------------ | |
5 files changed, 362 insertions(+), 364 deletions(-) | |
--- | |
diff --git a/Makefile b/Makefile | |
t@@ -3,7 +3,7 @@ | |
include config.mk | |
-SRC = client.c draw.c event.c main.c manage.c util.c | |
+SRC = client.c draw.c event.c main.c screen.c util.c | |
OBJ = ${SRC:.c=.o} | |
all: options dwm | |
diff --git a/client.c b/client.c | |
t@@ -10,6 +10,19 @@ | |
/* static */ | |
static void | |
+attachstack(Client *c) { | |
+ c->snext = stack; | |
+ stack = c; | |
+} | |
+ | |
+static void | |
+detachstack(Client *c) { | |
+ Client **tc; | |
+ for(tc=&stack; *tc && *tc != c; tc=&(*tc)->snext); | |
+ *tc = c->snext; | |
+} | |
+ | |
+static void | |
grabbuttons(Client *c, Bool focused) { | |
XUngrabButton(dpy, AnyButton, AnyModifier, c->win); | |
t@@ -68,6 +81,24 @@ setclientstate(Client *c, long state) { | |
PropModeReplace, (unsigned char *)data, 2); | |
} | |
+static void | |
+togglemax(Client *c) { | |
+ XEvent ev; | |
+ | |
+ if(c->isfixed) | |
+ return; | |
+ if((c->ismax = !c->ismax)) { | |
+ c->rx = c->x; | |
+ c->ry = c->y; | |
+ c->rw = c->w; | |
+ c->rh = c->h; | |
+ resize(c, wax, way, waw - 2 * BORDERPX, wah - 2 * BORDERPX, Tr… | |
+ } | |
+ else | |
+ resize(c, c->rx, c->ry, c->rw, c->rh, True); | |
+ while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | |
+} | |
+ | |
static int | |
xerrordummy(Display *dsply, XErrorEvent *ee) { | |
return 0; | |
t@@ -84,12 +115,6 @@ attach(Client *c) { | |
} | |
void | |
-attachstack(Client *c) { | |
- c->snext = stack; | |
- stack = c; | |
-} | |
- | |
-void | |
configure(Client *c) { | |
XConfigureEvent ce; | |
t@@ -119,13 +144,6 @@ detach(Client *c) { | |
} | |
void | |
-detachstack(Client *c) { | |
- Client **tc; | |
- for(tc=&stack; *tc && *tc != c; tc=&(*tc)->snext); | |
- *tc = c->snext; | |
-} | |
- | |
-void | |
focus(Client *c) { | |
if(c && !isvisible(c)) | |
return; | |
t@@ -256,6 +274,12 @@ manage(Window w, XWindowAttributes *wa) { | |
arrange(); | |
} | |
+Client * | |
+nexttiled(Client *c) { | |
+ for(; c && (c->isfloat || !isvisible(c)); c = c->next); | |
+ return c; | |
+} | |
+ | |
void | |
resize(Client *c, int x, int y, int w, int h, Bool sizehints) { | |
float actual, dx, dy, max, min; | |
t@@ -416,3 +440,26 @@ unmanage(Client *c) { | |
XUngrabServer(dpy); | |
arrange(); | |
} | |
+ | |
+void | |
+zoom(Arg *arg) { | |
+ unsigned int n; | |
+ Client *c; | |
+ | |
+ if(!sel) | |
+ return; | |
+ if(sel->isfloat || (arrange == dofloat)) { | |
+ togglemax(sel); | |
+ return; | |
+ } | |
+ for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next)) | |
+ n++; | |
+ | |
+ if((c = sel) == nexttiled(clients)) | |
+ if(!(c = nexttiled(c->next))) | |
+ return; | |
+ detach(c); | |
+ attach(c); | |
+ focus(c); | |
+ arrange(); | |
+} | |
diff --git a/dwm.h b/dwm.h | |
t@@ -99,22 +99,20 @@ extern Display *dpy; | |
extern Window root, barwin; | |
/* client.c */ | |
-extern void attach(Client *c); /* attaches c to global … | |
-extern void attachstack(Client *c); /* attaches client to stack… | |
extern void configure(Client *c); /* send synthetic configure e… | |
-extern void detach(Client *c); /* detaches c from globa… | |
-extern void detachstack(Client *c); /* detaches client from sta… | |
extern void focus(Client *c); /* focus c, c may be NULL… | |
extern void focusnext(Arg *arg); /* focuses next visible client… | |
extern void focusprev(Arg *arg); /* focuses previous visible cl… | |
extern Client *getclient(Window w); /* return client of w */ | |
extern void killclient(Arg *arg); /* kill c nicely */ | |
extern void manage(Window w, XWindowAttributes *wa); /* manage new clie… | |
+Client *nexttiled(Client *c); /* returns tiled successo… | |
extern void resize(Client *c, int x, int y, | |
int w, int h, Bool sizehints); /* resize c*/ | |
extern void updatesizehints(Client *c); /* update the size hint… | |
extern void updatetitle(Client *c); /* update the name of c */ | |
extern void unmanage(Client *c); /* destroy c */ | |
+extern void zoom(Arg *arg); /* zooms the focused client… | |
/* draw.c */ | |
extern void drawstatus(void); /* draw the bar */ | |
t@@ -131,7 +129,7 @@ extern void quit(Arg *arg); /* quit… | |
extern void sendevent(Window w, Atom a, long value); /* send synthetic … | |
extern int xerror(Display *dsply, XErrorEvent *ee); /* dwm's X error ha… | |
-/* manage.c */ | |
+/* screen.c */ | |
extern void compileregexps(void); /* initialize regexps of rule… | |
extern void dofloat(void); /* arranges all windows floa… | |
extern void dotile(void); /* arranges all windows tiled… | |
t@@ -146,9 +144,9 @@ extern void togglemode(Arg *arg); /* toggle… | |
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 view(Arg *arg); /* views the tag with arg's… | |
-extern void zoom(Arg *arg); /* zooms the focused client… | |
/* util.c */ | |
extern void *emallocz(unsigned int size); /* allocates zero-initialized… | |
extern void eprint(const char *errstr, ...); /* prints errstr and exits… | |
extern void spawn(Arg *arg); /* forks a new subprocess … | |
+ | |
diff --git a/screen.c b/screen.c | |
t@@ -0,0 +1,297 @@ | |
+/* (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> | |
+ | |
+void (*arrange)(void) = DEFMODE; | |
+unsigned int master = MASTER; | |
+unsigned int nmaster = NMASTER; | |
+ | |
+/* static */ | |
+ | |
+typedef struct { | |
+ const char *prop; | |
+ const char *tags; | |
+ Bool isfloat; | |
+} Rule; | |
+ | |
+typedef struct { | |
+ regex_t *propregex; | |
+ regex_t *tagregex; | |
+} Regexps; | |
+ | |
+TAGS | |
+RULES | |
+ | |
+static Regexps *regexps = NULL; | |
+static unsigned int len = 0; | |
+ | |
+/* extern */ | |
+ | |
+void | |
+compileregexps(void) { | |
+ unsigned int i; | |
+ regex_t *reg; | |
+ | |
+ if(regexps) | |
+ return; | |
+ len = sizeof rule / sizeof rule[0]; | |
+ regexps = emallocz(len * sizeof(Regexps)); | |
+ for(i = 0; i < len; i++) { | |
+ if(rule[i].prop) { | |
+ reg = emallocz(sizeof(regex_t)); | |
+ if(regcomp(reg, rule[i].prop, REG_EXTENDED)) | |
+ free(reg); | |
+ else | |
+ regexps[i].propregex = reg; | |
+ } | |
+ if(rule[i].tags) { | |
+ reg = emallocz(sizeof(regex_t)); | |
+ if(regcomp(reg, rule[i].tags, REG_EXTENDED)) | |
+ free(reg); | |
+ else | |
+ regexps[i].tagregex = reg; | |
+ } | |
+ } | |
+} | |
+ | |
+void | |
+dofloat(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 | |
+dotile(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->isfloat) | |
+ 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(); | |
+} | |
+ | |
+void | |
+incnmaster(Arg *arg) { | |
+ if((arrange == dofloat) || (nmaster + arg->i < 1) | |
+ || (wah / (nmaster + arg->i) <= 2 * BORDERPX)) | |
+ return; | |
+ nmaster += arg->i; | |
+ if(sel) | |
+ arrange(); | |
+ else | |
+ drawstatus(); | |
+} | |
+ | |
+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(arrange != dotile) | |
+ 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; | |
+ } | |
+ arrange(); | |
+} | |
+ | |
+void | |
+restack(void) { | |
+ Client *c; | |
+ XEvent ev; | |
+ | |
+ drawstatus(); | |
+ if(!sel) | |
+ return; | |
+ if(sel->isfloat || arrange == dofloat) | |
+ XRaiseWindow(dpy, sel->win); | |
+ if(arrange != dofloat) { | |
+ if(!sel->isfloat) | |
+ 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 | |
+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 < len; i++) | |
+ if(regexps[i].propregex && !regexec(regexps[i].propreg… | |
+ c->isfloat = rule[i].isfloat; | |
+ for(j = 0; regexps[i].tagregex && j < ntags; j… | |
+ if(!regexec(regexps[i].tagregex, tags[… | |
+ 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; | |
+ arrange(); | |
+} | |
+ | |
+void | |
+togglefloat(Arg *arg) { | |
+ if(!sel || arrange == dofloat) | |
+ return; | |
+ sel->isfloat = !sel->isfloat; | |
+ 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; | |
+ arrange(); | |
+} | |
+ | |
+void | |
+togglemode(Arg *arg) { | |
+ arrange = (arrange == dofloat) ? dotile : dofloat; | |
+ if(sel) | |
+ arrange(); | |
+ 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(); | |
+} | |
+ | |
+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; | |
+ arrange(); | |
+} | |
diff --git a/view.c b/view.c | |
t@@ -1,344 +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> | |
- | |
-void (*arrange)(void) = DEFMODE; | |
-unsigned int master = MASTER; | |
-unsigned int nmaster = NMASTER; | |
- | |
-/* static */ | |
- | |
-typedef struct { | |
- const char *prop; | |
- const char *tags; | |
- Bool isfloat; | |
-} Rule; | |
- | |
-typedef struct { | |
- regex_t *propregex; | |
- regex_t *tagregex; | |
-} Regexps; | |
- | |
-TAGS | |
-RULES | |
- | |
-static Regexps *regexps = NULL; | |
-static unsigned int len = 0; | |
- | |
-static Client * | |
-nextmanaged(Client *c) { | |
- for(; c && (c->isfloat || !isvisible(c)); c = c->next); | |
- return c; | |
-} | |
- | |
-static void | |
-togglemax(Client *c) { | |
- XEvent ev; | |
- | |
- if(c->isfixed) | |
- return; | |
- if((c->ismax = !c->ismax)) { | |
- c->rx = c->x; | |
- c->ry = c->y; | |
- c->rw = c->w; | |
- c->rh = c->h; | |
- resize(c, wax, way, waw - 2 * BORDERPX, wah - 2 * BORDERPX, Tr… | |
- } | |
- else | |
- resize(c, c->rx, c->ry, c->rw, c->rh, True); | |
- while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | |
-} | |
- | |
-/* extern */ | |
- | |
-void | |
-compileregexps(void) { | |
- unsigned int i; | |
- regex_t *reg; | |
- | |
- if(regexps) | |
- return; | |
- len = sizeof rule / sizeof rule[0]; | |
- regexps = emallocz(len * sizeof(Regexps)); | |
- for(i = 0; i < len; i++) { | |
- if(rule[i].prop) { | |
- reg = emallocz(sizeof(regex_t)); | |
- if(regcomp(reg, rule[i].prop, REG_EXTENDED)) | |
- free(reg); | |
- else | |
- regexps[i].propregex = reg; | |
- } | |
- if(rule[i].tags) { | |
- reg = emallocz(sizeof(regex_t)); | |
- if(regcomp(reg, rule[i].tags, REG_EXTENDED)) | |
- free(reg); | |
- else | |
- regexps[i].tagregex = reg; | |
- } | |
- } | |
-} | |
- | |
-void | |
-dofloat(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 | |
-dotile(void) { | |
- unsigned int i, n, nx, ny, nw, nh, mw, mh, tw, th; | |
- Client *c; | |
- | |
- for(n = 0, c = nextmanaged(clients); c; c = nextmanaged(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->isfloat) | |
- 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(); | |
-} | |
- | |
-void | |
-incnmaster(Arg *arg) { | |
- if((arrange == dofloat) || (nmaster + arg->i < 1) | |
- || (wah / (nmaster + arg->i) <= 2 * BORDERPX)) | |
- return; | |
- nmaster += arg->i; | |
- if(sel) | |
- arrange(); | |
- else | |
- drawstatus(); | |
-} | |
- | |
-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(arrange != dotile) | |
- 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; | |
- } | |
- arrange(); | |
-} | |
- | |
-void | |
-restack(void) { | |
- Client *c; | |
- XEvent ev; | |
- | |
- drawstatus(); | |
- if(!sel) | |
- return; | |
- if(sel->isfloat || arrange == dofloat) | |
- XRaiseWindow(dpy, sel->win); | |
- if(arrange != dofloat) { | |
- if(!sel->isfloat) | |
- XLowerWindow(dpy, sel->win); | |
- for(c = nextmanaged(clients); c; c = nextmanaged(c->next)) { | |
- if(c == sel) | |
- continue; | |
- XLowerWindow(dpy, c->win); | |
- } | |
- } | |
- XSync(dpy, False); | |
- while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | |
-} | |
- | |
-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 < len; i++) | |
- if(regexps[i].propregex && !regexec(regexps[i].propreg… | |
- c->isfloat = rule[i].isfloat; | |
- for(j = 0; regexps[i].tagregex && j < ntags; j… | |
- if(!regexec(regexps[i].tagregex, tags[… | |
- 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; | |
- arrange(); | |
-} | |
- | |
-void | |
-togglefloat(Arg *arg) { | |
- if(!sel || arrange == dofloat) | |
- return; | |
- sel->isfloat = !sel->isfloat; | |
- 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; | |
- arrange(); | |
-} | |
- | |
-void | |
-togglemode(Arg *arg) { | |
- arrange = (arrange == dofloat) ? dotile : dofloat; | |
- if(sel) | |
- arrange(); | |
- 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(); | |
-} | |
- | |
-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; | |
- arrange(); | |
-} | |
- | |
-void | |
-zoom(Arg *arg) { | |
- unsigned int n; | |
- Client *c; | |
- | |
- if(!sel) | |
- return; | |
- if(sel->isfloat || (arrange == dofloat)) { | |
- togglemax(sel); | |
- return; | |
- } | |
- for(n = 0, c = nextmanaged(clients); c; c = nextmanaged(c->next)) | |
- n++; | |
- | |
- if((c = sel) == nextmanaged(clients)) | |
- if(!(c = nextmanaged(c->next))) | |
- return; | |
- detach(c); | |
- attach(c); | |
- focus(c); | |
- arrange(); | |
-} |