JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
geom indicator and layout indicator is only displayed if there are several geoms...
[dwm.git] / dwm.c
diff --git a/dwm.c b/dwm.c
index 533632a..54d021f 100644 (file)
--- a/dwm.c
+++ b/dwm.c
@@ -259,7 +259,7 @@ applyrules(Client *c) {
        XGetClassHint(dpy, c->win, &ch);
        for(i = 0; i < LENGTH(rules); i++) {
                r = &rules[i];
-               if(strstr(c->name, r->title)
+               if((r->title && strstr(c->name, r->title))
                || (ch.res_class && r->class && strstr(ch.res_class, r->class))
                || (ch.res_name && r->instance && strstr(ch.res_name, r->instance)))
                {
@@ -423,8 +423,11 @@ void
 configurenotify(XEvent *e) {
        XConfigureEvent *ev = &e->xconfigure;
 
-       if(ev->window == root && (ev->width != sw || ev->height != sh))
+       if(ev->window == root && (ev->width != sw || ev->height != sh)) {
+               sw = ev->width;
+               sh = ev->height;
                setgeom(NULL);
+       }
 }
 
 void
@@ -514,9 +517,11 @@ drawbar(void) {
        Client *c;
 
        dc.x = 0;
-       dc.w = bgw;
-       drawtext(geom->symbol, dc.norm, False);
-       dc.x += bgw;
+       if(bgw > 0) {
+               dc.w = bgw;
+               drawtext(geom->symbol, dc.norm, False);
+               dc.x += bgw;
+       }
        for(c = stack; c && !isvisible(c); c = c->snext);
        for(i = 0; i < LENGTH(tags); i++) {
                dc.w = textw(tags[i]);
@@ -530,9 +535,13 @@ drawbar(void) {
                }
                dc.x += dc.w;
        }
-       dc.w = blw;
-       drawtext(lt->symbol, dc.norm, False);
-       x = dc.x + dc.w;
+       if(blw > 0) {
+               dc.w = blw;
+               drawtext(lt->symbol, dc.norm, False);
+               x = dc.x + dc.w;
+       }
+       else
+               x = dc.x;
        dc.w = textw(stext);
        dc.x = bw - dc.w;
        if(dc.x < x) {
@@ -857,7 +866,7 @@ unsigned int
 idxoftag(const char *t) {
        unsigned int i;
 
-       for(i = 0; (i < LENGTH(tags)) && strcmp(tags[i], t); i++);
+       for(i = 0; (i < LENGTH(tags)) && t && strcmp(tags[i], t); i++);
        return (i < LENGTH(tags)) ? i : 0;
 }
 
@@ -1445,7 +1454,7 @@ setlayout(const char *arg) {
 
 void
 setup(void) {
-       unsigned int i;
+       unsigned int i, w;
        XSetWindowAttributes wa;
 
        /* init screen */
@@ -1499,15 +1508,15 @@ setup(void) {
        lt = &layouts[0];
 
        /* init bar */
-       for(blw = i = 0; i < LENGTH(layouts); i++) {
-               i = textw(layouts[i].symbol);
-               if(i > blw)
-                       blw = i;
+       for(blw = i = 0; LENGTH(layouts) > 1 && i < LENGTH(layouts); i++) {
+               w = textw(layouts[i].symbol);
+               if(w > blw)
+                       blw = w;
        }
-       for(bgw = i = 0; i < LENGTH(geoms); i++) {
-               i = textw(geoms[i].symbol);
-               if(i > bgw)
-                       bgw = i;
+       for(bgw = i = 0; LENGTH(geoms) > 1 && i < LENGTH(geoms); i++) {
+               w = textw(geoms[i].symbol);
+               if(w > bgw)
+                       bgw = w;
        }
 
        wa.override_redirect = 1;