JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
removed Geom stuff, introduced updategeom() again, still view is somewhat broken?
authorAnselm R Garbe <garbeam@gmail.com>
Sun, 11 May 2008 19:20:53 +0000 (20:20 +0100)
committerAnselm R Garbe <garbeam@gmail.com>
Sun, 11 May 2008 19:20:53 +0000 (20:20 +0100)
config.def.h
dwm.1
dwm.c

index 0b5d9e4..c8e88de 100644 (file)
@@ -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] },
diff --git a/dwm.1 b/dwm.1
index fc750de..8b53942 100644 (file)
--- 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
diff --git a/dwm.c b/dwm.c
index 56ca615..6ef2ab2 100644 (file)
--- a/dwm.c
+++ b/dwm.c
 #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;
 }
-