On Sat, Sep 15, 2007 at 06:24:35PM -0400, James Turner wrote:
> I've updated the bottom stack patch to work with the new "micromizied"
> version of dwm.  It includes my previous main patch as well, so if your
> operating system doesn't support strlcpy you will need to remove that
> part from the patch.  Let me know if you experience any issues.
> 
> -- 
> James Turner
> BSD Group Consulting
> http://www.bsdgroup.org

Oops, forgot to attach the actual patch.

-- 
James Turner
BSD Group Consulting
http://www.bsdgroup.org
--- config.h    Sat Sep 15 18:10:36 2007
+++ config.h    Sat Sep 15 18:12:32 2007
@@ -26,6 +26,7 @@ static Layout layouts[] = {
        /* symbol               function */
        { "[]=",                tile }, /* first entry is default */
        { "><>",                floating },
+    { "TTT",        bstack },
 };
 #define RESIZEHINTS            True    /* False - respect size hints in tiled 
resizals */
 #define MWFACT                 0.6     /* master width factor [0.1 .. 0.9] */
--- dwm.c       Sat Sep 15 18:10:36 2007
+++ dwm.c       Sat Sep 15 17:53:58 2007
@@ -177,6 +177,7 @@ static void tag(const char *arg);
 static unsigned int textnw(const char *text, unsigned int len);
 static unsigned int textw(const char *text);
 static void tile(void);
+static void bstack(void);
 static void togglebar(const char *arg);
 static void togglefloating(const char *arg);
 static void togglemax(const char *arg);
@@ -479,7 +480,7 @@ initbar(void) {
        XDefineCursor(dpy, barwin, cursor[CurNormal]);
        updatebarpos();
        XMapRaised(dpy, barwin);
-       strcpy(stext, "dwm-"VERSION);
+       strlcpy(stext, "dwm-"VERSION, sizeof(stext));
        dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, 
screen));
        dc.gc = XCreateGC(dpy, root, 0, 0);
        XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
@@ -1723,7 +1724,7 @@ static void
 setmwfact(const char *arg) {
        double delta;
 
-       if(!isarrange(tile))
+       if(!isarrange(tile) && !isarrange(bstack))
                return;
        /* arg handling, manipulate mwfact */
        if(arg == NULL)
@@ -1780,11 +1781,48 @@ tile(void) {
        }
 }
 
+void
+bstack(void) {
+    unsigned int i, n, nx, ny, nw, nh, mh, tw, th;
+    Client *c;
+
+    for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next))
+        n++;
+
+    /* window geoms */
+    mh = (n > 1) ? (wah * mwfact) / 1 : wah / (n > 0 ? n : 1);
+    th = (n > 1) ? (wah * (1 - mwfact)) / 1 : 0;
+    tw = (n > 1) ? waw / (n - 1) : 0;
+
+    for(i = 0, c = nexttiled(clients); c; c = nexttiled(c->next), i++) {
+        c->ismax = False;
+        nx = wax;
+        ny = way;
+        if(i < 1) {
+            ny += i * mh;
+            nw = waw - 2 * c->border;
+            nh = mh - 2 * c->border;
+        }
+        else {
+            nx += (i - 1) * tw;
+            ny += mh * 1;
+            if(i + 1 == n) { /* remainder */
+                nw = (wax + waw) - nx - 2 * c->border;
+            }
+            else {
+                nw = tw - 2 * c->border;
+            }
+            nh = th - 2 * c->border + 1;
+        }
+        resize(c, nx, ny, nw, nh, RESIZEHINTS);
+    }
+}
+
 static void
 zoom(const char *arg) {
        Client *c;
 
-       if(!sel || !isarrange(tile) || sel->isfloating)
+       if(!sel || (!isarrange(tile) && !isarrange(bstack)) || sel->isfloating)
                return;
        if((c = sel) == nexttiled(clients))
                if(!(c = nexttiled(c->next)))

Reply via email to