dwm

my fork of dwm
Index Commits Files Refs README LICENSE
commit 7eb26288fc6aa4c8850f41d475230b1619df622b
parent 93a4fe1052e1271f7b4f519b4f2de4e3f4e15edc
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:
Mconfig.def.h | 12+-----------
Mdwm.1 | 3---
Mdwm.c | 122+++++++++++++++++++++++++++++++++----------------------------------------------
3 files changed, 52 insertions(+), 85 deletions(-)
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] },
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
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;
 }
-