t* dwm + patches
       
   URI git clone git://git.codevoid.de/dwm-sdk
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit f4d15b1fec52bdd6d512577fd96490efaddb55eb
   DIR parent 355beb53f085f51f49159bc9822922c11fbddd26
   URI Author: Anselm R. Garbe <arg@suckless.org>
       Date:   Tue, 20 Feb 2007 13:40:31 +0100
       
       separating drawsquare from drawtext, made drawtext extern
       Diffstat:
         M dwm.h                               |       2 ++
         M main.c                              |     112 +++++++++++++++++--------------
       
       2 files changed, 65 insertions(+), 49 deletions(-)
       ---
   DIR diff --git a/dwm.h b/dwm.h
       t@@ -131,6 +131,8 @@ extern void versatile(void);                        /* arranges all windows versatile */
        
        /* main.c */
        extern void drawstatus(void);                        /* draw the bar */
       +extern void drawtext(const char *text,
       +                unsigned long col[ColLast]);        /* draw text */
        extern unsigned int textw(const char *text);        /* return the width of text in px*/
        extern void quit(Arg *arg);                        /* quit dwm nicely */
        extern void sendevent(Window w, Atom a, long value);        /* send synthetic event to w */
   DIR diff --git a/main.c b/main.c
       t@@ -73,57 +73,21 @@ textnw(const char *text, unsigned int len) {
        }
        
        static void
       -drawtext(const char *text, unsigned long col[ColLast], Bool filledsquare, Bool emptysquare) {
       -        int x, y, w, h;
       -        static char buf[256];
       -        unsigned int len, olen;
       +drawsquare(Bool filled, Bool empty, unsigned long col[ColLast]) {
       +        int x;
                XGCValues gcv;
                XRectangle r = { dc.x, dc.y, dc.w, dc.h };
        
       -        XSetForeground(dpy, dc.gc, col[ColBG]);
       -        XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
       -        if(!text)
       -                return;
       -        w = 0;
       -        olen = len = strlen(text);
       -        if(len >= sizeof buf)
       -                len = sizeof buf - 1;
       -        memcpy(buf, text, len);
       -        buf[len] = 0;
       -        h = dc.font.ascent + dc.font.descent;
       -        y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
       -        x = dc.x + (h / 2);
       -        /* shorten text if necessary */
       -        while(len && (w = textnw(buf, len)) > dc.w - h)
       -                buf[--len] = 0;
       -        if(len < olen) {
       -                if(len > 1)
       -                        buf[len - 1] = '.';
       -                if(len > 2)
       -                        buf[len - 2] = '.';
       -                if(len > 3)
       -                        buf[len - 3] = '.';
       -        }
       -        if(w > dc.w)
       -                return; /* too long */
                gcv.foreground = col[ColFG];
       -        if(dc.font.set) {
       -                XChangeGC(dpy, dc.gc, GCForeground, &gcv);
       -                XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
       -        }
       -        else {
       -                gcv.font = dc.font.xfont->fid;
       -                XChangeGC(dpy, dc.gc, GCForeground | GCFont, &gcv);
       -                XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
       -        }
       -        x = (h + 2) / 4;
       +        XChangeGC(dpy, dc.gc, GCForeground, &gcv);
       +        x = (dc.font.ascent + dc.font.descent + 2) / 4;
                r.x = dc.x + 1;
                r.y = dc.y + 1;
       -        if(filledsquare) {
       +        if(filled) {
                        r.width = r.height = x + 1;
                        XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
                }
       -        else if(emptysquare) {
       +        else if(empty) {
                        r.width = r.height = x;
                        XDrawRectangles(dpy, dc.drawable, dc.gc, &r, 1);
                }
       t@@ -306,14 +270,18 @@ drawstatus(void) {
                dc.x = dc.y = 0;
                for(i = 0; i < ntags; i++) {
                        dc.w = textw(tags[i]);
       -                if(seltag[i])
       -                        drawtext(tags[i], dc.sel, sel && sel->tags[i], isoccupied(i));
       -                else
       -                        drawtext(tags[i], dc.norm, sel && sel->tags[i], isoccupied(i));
       +                if(seltag[i]) {
       +                        drawtext(tags[i], dc.sel);
       +                        drawsquare(sel && sel->tags[i], isoccupied(i), dc.sel);
       +                }
       +                else {
       +                        drawtext(tags[i], dc.norm);
       +                        drawsquare(sel && sel->tags[i], isoccupied(i), dc.norm);
       +                }
                        dc.x += dc.w;
                }
                dc.w = blw;
       -        drawtext(lt->symbol, dc.norm, False, False);
       +        drawtext(lt->symbol, dc.norm);
                x = dc.x + dc.w;
                dc.w = textw(stext);
                dc.x = sw - dc.w;
       t@@ -321,16 +289,62 @@ drawstatus(void) {
                        dc.x = x;
                        dc.w = sw - x;
                }
       -        drawtext(stext, dc.norm, False, False);
       +        drawtext(stext, dc.norm);
                if((dc.w = dc.x - x) > bh) {
                        dc.x = x;
       -                drawtext(sel ? sel->name : NULL, sel ? dc.sel : dc.norm, False, False);
       +                drawtext(sel ? sel->name : NULL, sel ? dc.sel : dc.norm);
                }
                XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, sw, bh, 0, 0);
                XSync(dpy, False);
        }
        
        void
       +drawtext(const char *text, unsigned long col[ColLast]) {
       +        int x, y, w, h;
       +        static char buf[256];
       +        unsigned int len, olen;
       +        XGCValues gcv;
       +        XRectangle r = { dc.x, dc.y, dc.w, dc.h };
       +
       +        XSetForeground(dpy, dc.gc, col[ColBG]);
       +        XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
       +        if(!text)
       +                return;
       +        w = 0;
       +        olen = len = strlen(text);
       +        if(len >= sizeof buf)
       +                len = sizeof buf - 1;
       +        memcpy(buf, text, len);
       +        buf[len] = 0;
       +        h = dc.font.ascent + dc.font.descent;
       +        y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
       +        x = dc.x + (h / 2);
       +        /* shorten text if necessary */
       +        while(len && (w = textnw(buf, len)) > dc.w - h)
       +                buf[--len] = 0;
       +        if(len < olen) {
       +                if(len > 1)
       +                        buf[len - 1] = '.';
       +                if(len > 2)
       +                        buf[len - 2] = '.';
       +                if(len > 3)
       +                        buf[len - 3] = '.';
       +        }
       +        if(w > dc.w)
       +                return; /* too long */
       +        gcv.foreground = col[ColFG];
       +        if(dc.font.set) {
       +                XChangeGC(dpy, dc.gc, GCForeground, &gcv);
       +                XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
       +        }
       +        else {
       +                gcv.font = dc.font.xfont->fid;
       +                XChangeGC(dpy, dc.gc, GCForeground | GCFont, &gcv);
       +                XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
       +        }
       +}
       +
       +void
        sendevent(Window w, Atom a, long value) {
                XEvent e;