--- dwm-6.0/old.dwm.c 2011-12-19 12:02:46.000000000 -0300
+++ dwm-6.0/dwm.c 2012-02-07 21:57:07.403678228 -0300
@@ -127,6 +127,7 @@
struct Monitor {
char ltsymbol[16];
float mfact;
+ float mhfact;
int nmaster;
int num;
int by; /* bar geometry */
@@ -220,6 +221,7 @@
static void setfullscreen(Client *c, Bool fullscreen);
static void setlayout(const Arg *arg);
static void setmfact(const Arg *arg);
+static void setmhfact(const Arg *arg);
static void setup(void);
static void showhide(Client *c);
static void sigchld(int unused);
@@ -651,6 +653,7 @@
die("fatal: could not malloc() %u bytes\n", sizeof(Monitor));
m->tagset[0] = m->tagset[1] = 1;
m->mfact = mfact;
+ m->mhfact = mhfact;
m->nmaster = nmaster;
m->showbar = showbar;
m->topbar = topbar;
@@ -1580,6 +1583,20 @@
arrange(selmon);
}
+/* arg > 1.0 will set mfact absolutly */
+void
+setmhfact(const Arg *arg) {
+ float f;
+
+ if(!arg || !selmon->lt[selmon->sellt]->arrange)
+ return;
+ f = arg->f < 1.0 ? arg->f + selmon->mhfact : arg->f - 1.0;
+ if(f < 0.1 || f > 0.9)
+ return;
+ selmon->mhfact = f;
+ arrange(selmon);
+}
+
void
setup(void) {
XSetWindowAttributes wa;
@@ -1716,7 +1733,10 @@
mw = m->ww;
for(i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
if(i < m->nmaster) {
- h = (m->wh - my) / (MIN(n, m->nmaster) - i);
+ if((i == 0) && (MIN(n, m->nmaster) > 1))
+ h = m->wh * m->mhfact;
+ else
+ h = (m->wh - my) / (MIN(n, m->nmaster) - i);
resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), False);
my += HEIGHT(c);
}