Xinqi Bao's Git

some sanity changes
[dwm.git] / dwm.c
diff --git a/dwm.c b/dwm.c
index 67fa0a7..a4deccf 100644 (file)
--- a/dwm.c
+++ b/dwm.c
@@ -232,11 +232,6 @@ 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) {
@@ -254,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;
@@ -313,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) {
@@ -537,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);
@@ -671,7 +666,7 @@ void
 expose(XEvent *e) {
        XExposeEvent *ev = &e->xexpose;
 
-       if(ev->count == 0) {
+       if(0 == ev->count) {
                if(barwin == ev->window)
                        drawbar();
        }
@@ -785,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);
@@ -847,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
@@ -930,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;
@@ -1140,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:
@@ -1405,7 +1398,7 @@ setmwfact(const char *arg) {
        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] == '-')
@@ -1522,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();
@@ -1542,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();
 }
 
@@ -1585,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;
                }
@@ -1600,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;
        }
@@ -1662,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();
 }
 
@@ -1674,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();
 }
@@ -1841,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();
 }