JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
some sanity changes
[dwm.git] / dwm.c
diff --git a/dwm.c b/dwm.c
index 99920d0..a4deccf 100644 (file)
--- 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)))