URI: 
       removed Geom stuff, introduced updategeom() again, still view is somewhat broken? - dwm - dynamic window manager
  HTML git clone https://git.parazyd.org/dwm
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 7eb26288fc6aa4c8850f41d475230b1619df622b
   DIR parent 93a4fe1052e1271f7b4f519b4f2de4e3f4e15edc
  HTML Author: Anselm R Garbe <garbeam@gmail.com>
       Date:   Sun, 11 May 2008 20:20:53 +0100
       
       removed Geom stuff, introduced updategeom() again, still view is somewhat broken?
       Diffstat:
         M config.def.h                        |      12 +-----------
         M dwm.1                               |       3 ---
         M dwm.c                               |     122 +++++++++++++------------------
       
       3 files changed, 52 insertions(+), 85 deletions(-)
       ---
   DIR diff --git a/config.def.h b/config.def.h
       @@ -18,17 +18,8 @@ Rule rules[] = {
                { "Gimp",        NULL,                NULL,                NULL,                True },
        };
        
       -/* geometries, s{x,y,w,h} and bh are already initualized here */
       -/*   func name  bx  by  bw  wx  wy  ww     wh  mx  my       mw  mh     tx  ty     tw  th  mox moy mow moh */
       -#define MFACT                        0.55        /* master width factor [0.1 .. 0.9] */
       -DEFGEOM(single,  0,  0, sw,  0, bh, sw, sh-bh, wx, wy, mfact*ww, wh, mx+mw, wy, ww-mw, wh,  wx, wy, ww, wh)
       -
       -Geom geoms[] = {
       -        /* symbol        function */
       -        { "[]",                single },        /* first entry is default */
       -};
       -
        /* layout(s) */
       +#define MFACT                        0.55        /* master width factor [0.1 .. 0.9] */
        #define RESIZEHINTS                True        /* False - respect size hints in tiled resizals */
        #define SNAP                        32        /* snap pixel */
        
       @@ -58,7 +49,6 @@ Key keys[] = {
                { MODKEY|ShiftMask,                XK_c,                killclient,        NULL },
                { MODKEY,                        XK_space,        setlayout,        NULL },
                { MODKEY|ShiftMask,                XK_space,        togglefloating,        NULL },
       -        { MODKEY|ControlMask,                XK_space,        setgeom,        NULL },
                { MODKEY,                        XK_0,                view,                NULL },
                { MODKEY,                        XK_1,                view,                tags[0] },
                { MODKEY,                        XK_2,                view,                tags[1] },
   DIR diff --git a/dwm.1 b/dwm.1
       @@ -60,9 +60,6 @@ Start
        .B Mod1\-space
        Toggles between layouts.
        .TP
       -.B Mod1\-Control\-space
       -Toggles between geometries.
       -.TP
        .B Mod1\-j
        Focus next window.
        .TP
   DIR diff --git a/dwm.c b/dwm.c
       @@ -41,21 +41,13 @@
        #include <X11/Xutil.h>
        
        /* macros */
       -#define MAX(a, b) ((a)>(b)?(a):(b))
       -#define MIN(a, b) ((a)<(b)?(a):(b))
       -#define BUTTONMASK                (ButtonPressMask|ButtonReleaseMask)
       -#define CLEANMASK(mask)                (mask & ~(numlockmask|LockMask))
       -#define LENGTH(x)                (sizeof x / sizeof x[0])
       -#define MAXTAGLEN                16
       -#define MOUSEMASK                (BUTTONMASK|PointerMotionMask)
       -#define DEFGEOM(GEONAME,BX,BY,BW,WX,WY,WW,WH,MX,MY,MW,MH,TX,TY,TW,TH,MOX,MOY,MOW,MOH) \
       -void GEONAME(void) { \
       -        bx = (BX); by = (BY); bw = (BW); \
       -        wx = (WX); wy = (WY); ww = (WW); wh = (WH); \
       -        mx = (MX); my = (MY); mw = (MW); mh = (MH); \
       -        tx = (TX); ty = (TY); tw = (TW); th = (TH); \
       -        mox = (MOX); moy = (MOY); mow = (MOW); moh = (MOH); \
       -}
       +#define MAX(a, b)        ((a) > (b) ? (a) : (b))
       +#define MIN(a, b)        ((a) < (b) ? (a) : (b))
       +#define BUTTONMASK        (ButtonPressMask|ButtonReleaseMask)
       +#define CLEANMASK(mask)        (mask & ~(numlockmask|LockMask))
       +#define LENGTH(x)        (sizeof x / sizeof x[0])
       +#define MAXTAGLEN        16
       +#define MOUSEMASK        (BUTTONMASK|PointerMotionMask)
        
        /* enums */
        enum { CurNormal, CurResize, CurMove, CurLast };        /* cursor */
       @@ -97,11 +89,6 @@ typedef struct {
        } DC; /* draw context */
        
        typedef struct {
       -        const char *symbol;
       -        void (*apply)(void);
       -} Geom;
       -
       -typedef struct {
                unsigned long mod;
                KeySym keysym;
                void (*func)(const char *arg);
       @@ -178,7 +165,6 @@ void restack(void);
        void run(void);
        void scan(void);
        void setclientstate(Client *c, long state);
       -void setgeom(const char *arg);
        void setlayout(const char *arg);
        void setmfact(const char *arg);
        void setup(void);
       @@ -198,7 +184,8 @@ void toggleview(const char *arg);
        void unban(Client *c);
        void unmanage(Client *c);
        void unmapnotify(XEvent *e);
       -void updatebarpos(void);
       +void updatebar(void);
       +void updategeom(void);
        void updatesizehints(Client *c);
        void updatetitle(Client *c);
        void updatewmhints(Client *c);
       @@ -213,7 +200,7 @@ void zoom(const char *arg);
        char stext[256];
        int screen, sx, sy, sw, sh;
        int (*xerrorxlib)(Display *, XErrorEvent *);
       -int bx, by, bw, bh, blw, bgw, mx, my, mw, mh, mox, moy, mow, moh, tx, ty, tw, th, wx, wy, ww, wh;
       +int bx, by, bw, bh, blw, mx, my, mw, mh, tx, ty, tw, th, wx, wy, ww, wh;
        int seltags = 0;
        double mfact;
        unsigned int numlockmask = 0;
       @@ -241,8 +228,6 @@ Client *stack = NULL;
        Cursor cursor[CurLast];
        Display *dpy;
        DC dc = {0};
       -Geom geoms[];
       -Geom *geom = geoms;
        Layout layouts[];
        Layout *lt = layouts;
        Window root, barwin;
       @@ -330,14 +315,10 @@ buttonpress(XEvent *e) {
                XButtonPressedEvent *ev = &e->xbutton;
        
                if(ev->window == barwin) {
       -                if((ev->x < bgw) && ev->button == Button1) {
       -                        setgeom(NULL);
       -                        return;
       -                }
       -                x = bgw;
       +                x = 0;
                        for(i = 0; i < LENGTH(tags); i++) {
                                x += textw(tags[i]);
       -                        if(ev->x >= bgw && ev->x < x) {
       +                        if(ev->x < x) {
                                        if(ev->button == Button1) {
                                                if(ev->state & MODKEY)
                                                        tag(tags[i]);
       @@ -440,7 +421,9 @@ configurenotify(XEvent *e) {
                if(ev->window == root && (ev->width != sw || ev->height != sh)) {
                        sw = ev->width;
                        sh = ev->height;
       -                setgeom(geom->symbol);
       +                updategeom();
       +                updatebar();
       +                arrange();
                }
        }
        
       @@ -531,11 +514,6 @@ drawbar(void) {
                Client *c;
        
                dc.x = 0;
       -        if(bgw > 0) {
       -                dc.w = bgw;
       -                drawtext(geom->symbol, dc.norm, False);
       -                dc.x += bgw;
       -        }
                for(c = stack; c && !isvisible(c, NULL); c = c->snext);
                for(i = 0; i < LENGTH(tags); i++) {
                        dc.w = textw(tags[i]);
       @@ -1064,7 +1042,7 @@ monocle(void) {
        
                for(c = clients; c; c = c->next)
                        if((lt->isfloating || !c->isfloating) &&  isvisible(c, NULL))
       -                        resize(c, mox, moy, mow - 2 * c->bw, moh - 2 * c->bw, RESIZEHINTS);
       +                        resize(c, wx, wy, ww - 2 * c->bw, wh - 2 * c->bw, RESIZEHINTS);
        }
        
        void
       @@ -1399,27 +1377,6 @@ setclientstate(Client *c, long state) {
        }
        
        void
       -setgeom(const char *arg) {
       -        unsigned int i;
       -
       -        if(!arg) {
       -                if(++geom == &geoms[LENGTH(geoms)])
       -                        geom = &geoms[0];
       -        }
       -        else {
       -                for(i = 0; i < LENGTH(geoms); i++)
       -                        if(!strcmp(geoms[i].symbol, arg))
       -                                break;
       -                if(i == LENGTH(geoms))
       -                        return;
       -                geom = &geoms[i];
       -        }
       -        geom->apply();
       -        updatebarpos();
       -        arrange();
       -}
       -
       -void
        setlayout(const char *arg) {
                unsigned int i;
        
       @@ -1457,7 +1414,8 @@ setmfact(const char *arg) {
                                return;
                        mfact = d;
                }
       -        setgeom(geom->symbol);
       +        updategeom();
       +        arrange();
        }
        
        void
       @@ -1469,15 +1427,14 @@ setup(void) {
                screen = DefaultScreen(dpy);
                root = RootWindow(dpy, screen);
                initfont(FONT);
       -
       -        /* apply default geometry */
                sx = 0;
                sy = 0;
                sw = DisplayWidth(dpy, screen);
                sh = DisplayHeight(dpy, screen);
                bh = dc.font.height + 2;
       -        mfact = MFACT;
       -        geom->apply();
       +
       +        /* update geometry */
       +        updategeom();
        
                /* init atoms */
                wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
       @@ -1517,10 +1474,6 @@ setup(void) {
                        w = textw(layouts[i].symbol);
                        blw = MAX(blw, w);
                }
       -        for(bgw = i = 0; LENGTH(geoms) > 1 && i < LENGTH(geoms); i++) {
       -                w = textw(geoms[i].symbol);
       -                bgw = MAX(bgw, w);
       -        }
        
                wa.override_redirect = 1;
                wa.background_pixmap = ParentRelative;
       @@ -1633,7 +1586,7 @@ tilemaster(unsigned int n) {
                Client *c = nexttiled(clients);
        
                if(n == 1)
       -                tileresize(c, mox, moy, mow - 2 * c->bw, moh - 2 * c->bw);
       +                tileresize(c, wx, wy, ww - 2 * c->bw, wh - 2 * c->bw);
                else
                        tileresize(c, mx, my, mw - 2 * c->bw, mh - 2 * c->bw);
                return c;
       @@ -1751,7 +1704,7 @@ unmapnotify(XEvent *e) {
        }
        
        void
       -updatebarpos(void) {
       +updatebar(void) {
        
                if(dc.drawable != 0)
                        XFreePixmap(dpy, dc.drawable);
       @@ -1760,6 +1713,34 @@ updatebarpos(void) {
        }
        
        void
       +updategeom(void) {
       +
       +        /* bar geometry */
       +        bx = 0;
       +        by = 0;
       +        bw = sw;
       +
       +        /* window area geometry */
       +        wx = sx;
       +        wy = sy;
       +        ww = sw;
       +        sh = sh - bh;
       +
       +        /* master area geometry */
       +        mfact = MFACT;
       +        mx = wx;
       +        my = wy;
       +        mw = mfact * ww;
       +        mh = wh;
       +
       +        /* tile area geometry */
       +        tx = mx + mw;
       +        ty = wy;
       +        tw = ww - mw;
       +        th = wh;
       +}
       +
       +void
        updatesizehints(Client *c) {
                long msize;
                XSizeHints size;
       @@ -1912,4 +1893,3 @@ main(int argc, char *argv[]) {
                XCloseDisplay(dpy);
                return 0;
        }
       -