t* dwm + patches
       
   URI git clone git://git.codevoid.de/dwm-sdk
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit a3bbdb1b7bb30d3f11c24bf74414ee11f745688d
   DIR parent d53ceee68266b0910d632b1978d8fd6371ff52b3
   URI Author: Anselm R Garbe <anselm@garbe.us>
       Date:   Mon, 22 Jun 2009 20:29:59 +0100
       
       some more refactoring, bar toggle fixes
       Diffstat:
         M dwm.c                               |      44 +++++++++++++++++++------------
       
       1 file changed, 27 insertions(+), 17 deletions(-)
       ---
   DIR diff --git a/dwm.c b/dwm.c
       t@@ -124,6 +124,7 @@ struct Monitor {
                int screen_number;
                float mfact;
                int by, btx;          /* bar geometry */
       +        int my, mh;           /* vertical screen size*/
                int wx, wy, ww, wh;   /* window area  */
                unsigned int seltags;
                unsigned int sellt;
       t@@ -209,6 +210,7 @@ static void toggleview(const Arg *arg);
        static void unmanage(Client *c);
        static void unmapnotify(XEvent *e);
        static void updategeom(void);
       +static void updatebarpos(Monitor *m);
        static void updatebars(void);
        static void updatenumlockmask(void);
        static void updatesizehints(Client *c);
       t@@ -389,7 +391,7 @@ buttonpress(XEvent *e) {
                XButtonPressedEvent *ev = &e->xbutton;
        
                click = ClkRootWin;
       -        if(ev->window == selmon->barwin) {
       +        if(ev->window == selmon->barwin && ev->x >= selmon->btx) {
                        i = 0;
                        x = selmon->btx;
                        do
       t@@ -597,6 +599,7 @@ die(const char *errstr, ...) {
        
        void
        drawbar(Monitor *m) {
       +        char buf[2];
                int x;
                unsigned int i, occ = 0, urg = 0;
                unsigned long *col;
       t@@ -613,11 +616,11 @@ drawbar(Monitor *m) {
                dc.x = 0;
        #ifdef XINERAMA
                {
       -                /*
       -                dc.w = TEXTW(m->symbol);
       -                drawtext(NULL, selmon == m ? dc.sel : dc.norm, False);
       +                buf[0] = m->screen_number + '0';
       +                buf[1] = '\0';
       +                dc.w = TEXTW(buf);
       +                drawtext(buf, selmon == m ? dc.sel : dc.norm, True);
                        dc.x += dc.w;
       -                */
                }
        #endif /* XINERAMA */
                m->btx = dc.x;
       t@@ -1525,7 +1528,7 @@ tile(Monitor *m) {
        void
        togglebar(const Arg *arg) {
                selmon->showbar = !selmon->showbar;
       -        updategeom();
       +        updatebarpos(selmon);
                XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
                arrange();
        }
       t@@ -1615,6 +1618,19 @@ updatebars(void) {
        }
        
        void
       +updatebarpos(Monitor *m) {
       +        m->wy = m->my;
       +        m->wh = m->mh;
       +        if(m->showbar) {
       +                m->wh -= bh;
       +                m->by = m->topbar ? m->wy : m->wy + m->wh;
       +                m->wy = m->topbar ? m->wy + bh : m->wy;
       +        }
       +        else
       +                m->by = -bh;
       +}
       +
       +void
        updategeom(void) {
                int i, n;
                Client *c;
       t@@ -1639,9 +1655,9 @@ updategeom(void) {
                        for(i = 0, m = newmons; m; m = m->next, i++) {
                                m->screen_number = info[i].screen_number;
                                m->wx = info[i].x_org;
       -                        m->wy = info[i].y_org;
       +                        m->my = m->wy = info[i].y_org;
                                m->ww = info[i].width;
       -                        m->wh = info[i].height;
       +                        m->mh = m->wh = info[i].height;
                        }
                        XFree(info);
                }
       t@@ -1651,9 +1667,9 @@ updategeom(void) {
                {
                        m->screen_number = 0;
                        m->wx = sx;
       -                m->wy = sy;
       +                m->my = m->wy = sy;
                        m->ww = sw;
       -                m->wh = sh;
       +                m->mh = m->wh = sh;
                }
        
                /* bar geometry setup */
       t@@ -1665,13 +1681,7 @@ updategeom(void) {
                        m->mfact = mfact;
                        m->showbar = showbar;
                        m->topbar = topbar;
       -                if(m->showbar) {
       -                        m->wh -= bh;
       -                        m->by = m->topbar ? m->wy : m->wy + m->wh;
       -                        m->wy = m->topbar ? m->wy + bh : m->wy;
       -                }
       -                else
       -                        m->by = -bh;
       +                updatebarpos(m);
                        /* reassign all clients with same screen number */
                        for(c = clients; c; c = c->next)
                                if(c->m->screen_number == m->screen_number)