On Sun, Aug 12, 2007 at 08:42:47AM -0400, James Turner wrote:
> On Sun, Aug 12, 2007 at 12:53:46PM +0200, Anselm R. Garbe wrote:
> > On Sat, Aug 11, 2007 at 08:09:54PM -0400, James Turner wrote:
> > > Well the zoom function seems to work, but increasing the master area  
> > > does not.  I changed part of the incmaster function within tile.c to  
> > > if(lt->arrange == floating) return; but I still can't increase the  
> > > master in the bottom stack layout mode.  Any ideas?
> > 
> > 
> > Well I decided against making master global. I pushed a
> > changeset recently with following decisions:
> > 
> > MASTER is renamed to MWFACT (master width factor) - which is
> > more precise.
> > 
> > master in tile.c is renamed to mwfact, incmaster is renamed to
> > addtomwfact - which is also more precise.
> > 
> > So this change also points out, that your bstack patch should
> > contain something like MHFACT (master height factor) as counter
> > part. Except of zoom(), which you can re-use from tile, I
> > propose you clone the addtomwfact() behavior as follows for
> > bstack:
> > 
> > 
> > /* static */
> > 
> > static double mhfact = MHFACT;
> > 
> > /* extern */
> > 
> > void
> > addtomhfact(const char *arg) {
> >     double delta;
> > 
> >     if(lt->arrange != bstack)
> >             return;
> > 
> >     /* arg handling, manipulate mhfact */
> >     if(arg && (1 == sscanf(arg, "%lf", &delta))) {
> >             if(delta + mhfact > 0.1 && delta + mhfact < 0.9)
> >                     mhfact += delta;
> >     }
> >     lt->arrange();
> > }
> > 
> > 
> > And in config.h you add something like this (besides cloning
> > MHFACT similiar to MWFACT):
> > 
> > 
> > { MODKEY,                       XK_h, addtomwfact,    "-0.05" }, \
> > { MODKEY,                       XK_l, addtomhfact,    "0.05" } , \
> > { MODKEY,                       XK_h, addtomwfact,    "-0.05" }, \
> > { MODKEY,                       XK_l, addtomhfact,    "0.05" } , \
> > 
> > 
> > This is somewhat cumbersome for bstack, but the only other
> > option would be to design bstack as patch to tile.c.
> > 
> > Regards,
> > -- 
> >  Anselm R. Garbe >< http://www.suckless.org/ >< GPG key: 0D73F361
> 
> Because of the nature of bstack, would it make more sense to just patch
> tile.c rather than make it it's own layout and clone the addtowfact
> function?  Since changes are still happening I would like to take this
> time to make sure the patch is done the so called "correct" way.
> Thanks.
> 
> -- 
> James Turner
> BSD Group Consulting
> http://www.bsdgroup.org

I went ahead and created a new patch that patches tile.c rather then
creating an all new bstack layout.  You can find it here:
http://calminferno.net/files/dwm-4.4-bstack-tile.diff or attached.

-- 
James Turner
BSD Group Consulting
http://www.bsdgroup.org
--- config.arg.h        Sun Aug 12 05:19:58 2007
+++ config.arg.h        Sun Aug 12 04:45:43 2007
@@ -30,6 +30,7 @@ static Layout layout[] = { \
        /* symbol               function */ \
        { "[]=",                tile }, /* first entry is default */ \
        { "><>",                floating }, \
+       { "TTT",                bstack }, \
 };
 #define MWFACT                 0.6     /* master width factor [0.1 .. 0.9] */
 #define SNAP                   32      /* snap pixel */
--- config.default.h    Sun Aug 12 05:19:58 2007
+++ config.default.h    Sun Aug 12 04:45:57 2007
@@ -31,6 +31,7 @@ static Layout layout[] = { \
        /* symbol               function */ \
        { "[]=",                tile }, /* first entry is default */ \
        { "><>",                floating }, \
+       { "TTT",                bstack }, \
 };
 #define MWFACT                 0.6     /* master width factor [0.1 .. 0.9] */
 #define SNAP                   32      /* snap pixel */
--- tile.c      Sun Aug 12 05:19:58 2007
+++ tile.c      Sun Aug 12 05:20:19 2007
@@ -12,7 +12,7 @@ void
 addtomwfact(const char *arg) {
        double delta;
 
-       if(lt->arrange != tile)
+       if(lt->arrange == floating)
                return;
 
        /* arg handling, manipulate mwfact */
@@ -63,6 +63,53 @@ tile(void) {
                        resize(c, nx, ny, nw, nh, False);
                        if(n > 1 && th != wah)
                                ny += nh + 2 * c->border;
+                       i++;
+               }
+               else
+                       ban(c);
+       focus(NULL);
+       restack();
+}
+
+void
+bstack(void) {
+       unsigned int i, n, nx, ny, nw, nh, mw, 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);
+       mw = waw;
+       th = (n > 1) ? (wah * (1 - mwfact)) / 1 : 0;
+       tw = (n > 1) ? waw / (n - 1) : 0;
+
+       for(i = 0, c = clients; c; c = c->next)
+               if(isvisible(c)) {
+                       unban(c);
+                       if(c->isfloating)
+                               continue;
+                       c->ismax = False;
+                       nx = wax;
+                       ny = way;
+                       if(i < 1) {
+                               ny += i * mh;
+                               nw = mw - 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, False);
                        i++;
                }
                else
--- tile.h      Sun Aug 12 05:19:58 2007
+++ tile.h      Sun Aug 12 04:46:33 2007
@@ -3,4 +3,5 @@
 /* tile.c */
 void addtomwfact(const char *arg);     /* adds arg value [0.1 .. 0.9] to 
master width factor */
 void tile(void);                       /* arranges all windows tiled */
+void bstack(void);                     /* arranges all windows bottom stacked 
*/
 void zoom(const char *arg);            /* zooms the focused client to master 
area, arg is ignored */

Reply via email to