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 */