X-Git-Url: https://git.xinqibao.xyz/dwm.git/blobdiff_plain/cd7ebaad25fa5f10a4442f9d80a05f344ca271d3..3fd39feb4153cf73f26223918bc8145ee98a9a92:/dwm.c diff --git a/dwm.c b/dwm.c index 99920d0..a4deccf 100644 --- a/dwm.c +++ b/dwm.c @@ -111,7 +111,7 @@ typedef struct { regex_t *tagregex; } Regs; -/* functions */ +/* function declarations */ void applyrules(Client *c); void arrange(void); void attach(Client *c); @@ -232,10 +232,7 @@ Regs *regs = NULL; /* configuration, allows nested code to access above variables */ #include "config.h" -/* statically define the number of tags. */ -unsigned int ntags = sizeof tags / sizeof tags[0]; -Bool seltags[sizeof tags / sizeof tags[0]] = {[0] = True}; -Bool prevtags[sizeof tags / sizeof tags[0]] = {[0] = True}; +/* function implementations */ void applyrules(Client *c) { static char buf[512]; @@ -252,7 +249,7 @@ applyrules(Client *c) { for(i = 0; i < nrules; i++) if(regs[i].propregex && !regexec(regs[i].propregex, buf, 1, &tmp, 0)) { c->isfloating = rules[i].isfloating; - for(j = 0; regs[i].tagregex && j < ntags; j++) { + for(j = 0; regs[i].tagregex && j < NTAGS; j++) { if(!regexec(regs[i].tagregex, tags[j], 1, &tmp, 0)) { matched = True; c->tags[j] = True; @@ -311,7 +308,7 @@ buttonpress(XEvent *e) { if(barwin == ev->window) { x = 0; - for(i = 0; i < ntags; i++) { + for(i = 0; i < NTAGS; i++) { x += textw(tags[i]); if(ev->x < x) { if(ev->button == Button1) { @@ -344,7 +341,7 @@ buttonpress(XEvent *e) { movemouse(c); } else if(ev->button == Button2) { - if(ISTILE && !c->isfixed && c->isfloating) + if((ISTILE) && !c->isfixed && c->isfloating) togglefloating(NULL); else zoom(NULL); @@ -535,7 +532,7 @@ drawbar(void) { int i, x; dc.x = dc.y = 0; - for(i = 0; i < ntags; i++) { + for(i = 0; i < NTAGS; i++) { dc.w = textw(tags[i]); if(seltags[i]) { drawtext(tags[i], dc.sel); @@ -669,7 +666,7 @@ void expose(XEvent *e) { XExposeEvent *ev = &e->xexpose; - if(ev->count == 0) { + if(0 == ev->count) { if(barwin == ev->window) drawbar(); } @@ -783,7 +780,7 @@ gettextprop(Window w, Atom atom, char *text, unsigned int size) { int n; XTextProperty name; - if(!text || size == 0) + if(!text || 0 == size) return False; text[0] = '\0'; XGetTextProperty(dpy, w, &name, atom); @@ -845,10 +842,8 @@ unsigned int idxoftag(const char *tag) { unsigned int i; - for(i = 0; i < ntags; i++) - if(tags[i] == tag) - return i; - return 0; + for(i = 0; (i < NTAGS) && (tags[i] != tag); i++); + return (i < NTAGS) ? i : 0; } void @@ -928,7 +923,7 @@ Bool isvisible(Client *c) { unsigned int i; - for(i = 0; i < ntags; i++) + for(i = 0; i < NTAGS; i++) if(c->tags[i] && seltags[i]) return True; return False; @@ -1138,7 +1133,7 @@ propertynotify(XEvent *e) { default: break; case XA_WM_TRANSIENT_FOR: XGetTransientForHint(dpy, c->win, &trans); - if(!c->isfloating && (c->isfloating = (getclient(trans) != NULL))) + if(!c->isfloating && (c->isfloating = (NULL != getclient(trans)))) arrange(); break; case XA_WM_NORMAL_HINTS: @@ -1400,10 +1395,10 @@ void setmwfact(const char *arg) { double delta; - if(!ISTILE) + if(!(ISTILE)) return; /* arg handling, manipulate mwfact */ - if(arg == NULL) + if(NULL == arg) mwfact = MWFACT; else if(1 == sscanf(arg, "%lf", &delta)) { if(arg[0] == '+' || arg[0] == '-') @@ -1520,8 +1515,8 @@ spawn(const char *arg) { return; /* The double-fork construct avoids zombie processes and keeps the code * clean from stupid signal handlers. */ - if(fork() == 0) { - if(fork() == 0) { + if(0 == fork()) { + if(0 == fork()) { if(dpy) close(ConnectionNumber(dpy)); setsid(); @@ -1540,11 +1535,9 @@ tag(const char *arg) { if(!sel) return; - for(i = 0; i < ntags; i++) - sel->tags[i] = arg == NULL; - i = idxoftag(arg); - if(i >= 0 && i < ntags) - sel->tags[i] = True; + for(i = 0; i < NTAGS; i++) + sel->tags[i] = (NULL == arg); + sel->tags[idxoftag(arg)] = True; arrange(); } @@ -1583,7 +1576,7 @@ tile(void) { nw = 0; /* gcc stupidity requires this */ for(i = 0, c = mc = nexttiled(clients); c; c = nexttiled(c->next), i++) { c->ismax = False; - if(i == 0) { /* master */ + if(0 == i) { /* master */ nw = mw - 2 * c->border; nh = wah - 2 * c->border; } @@ -1598,7 +1591,10 @@ tile(void) { else nh = th - 2 * c->border; } - resize(c, nx, ny, nw, nh, RESIZEHINTS); + resize(c, nx, ny, nw, nh, True); + if((c->h < bh) || (c->h > nh) || (c->w < bh) || (c->w > nw)) + /* client doesn't accept size constraints */ + resize(c, nx, ny, nw, nh, False); if(n > 1 && th != wah) ny = c->y + c->h + 2 * c->border; } @@ -1660,9 +1656,9 @@ toggletag(const char *arg) { return; i = idxoftag(arg); sel->tags[i] = !sel->tags[i]; - for(j = 0; j < ntags && !sel->tags[j]; j++); - if(j == ntags) - sel->tags[i] = True; + for(j = 0; j < NTAGS && !sel->tags[j]; j++); + if(j == NTAGS) + sel->tags[i] = True; /* at least one tag must be enabled */ arrange(); } @@ -1672,8 +1668,8 @@ toggleview(const char *arg) { i = idxoftag(arg); seltags[i] = !seltags[i]; - for(j = 0; j < ntags && !seltags[j]; j++); - if(j == ntags) + for(j = 0; j < NTAGS && !seltags[j]; j++); + if(j == NTAGS) seltags[i] = True; /* at least one tag must be viewed */ arrange(); } @@ -1839,11 +1835,9 @@ view(const char *arg) { unsigned int i; memcpy(prevtags, seltags, sizeof seltags); - for(i = 0; i < ntags; i++) - seltags[i] = arg == NULL; - i = idxoftag(arg); - if(i >= 0 && i < ntags) - seltags[i] = True; + for(i = 0; i < NTAGS; i++) + seltags[i] = (NULL == arg); + seltags[idxoftag(arg)] = True; arrange(); } @@ -1861,7 +1855,7 @@ void zoom(const char *arg) { Client *c; - if(!sel || !ISTILE || sel->isfloating) + if(!sel || !(ISTILE) || sel->isfloating) return; if((c = sel) == nexttiled(clients)) if(!(c = nexttiled(c->next)))