rendered paste bodydiff -up dwm-4.2/client.c dwm009/client.c
--- dwm-4.2/client.c 2007-05-30 07:20:42.000000000 -0300
+++ dwm009/client.c 2007-07-08 19:42:17.000000000 -0300
@@ -221,6 +221,7 @@ manage(Window w, XWindowAttributes *wa)
XMapWindow(dpy, w);
setclientstate(c, NormalState);
focus(c);
+ /* incfocusedtilew("reset"); */
lt->arrange();
}
@@ -398,5 +399,7 @@ unmanage(Client *c) {
XSync(dpy, False);
XSetErrorHandler(xerror);
XUngrabServer(dpy);
+/* incfocusedtilew("reset"); */
+
lt->arrange();
}
Only in dwm009: client.o
diff -up dwm-4.2/config.default.h dwm009/config.default.h
--- dwm-4.2/config.default.h 2007-05-30 07:20:42.000000000 -0300
+++ dwm009/config.default.h 2007-07-08 19:37:23.000000000 -0300
@@ -29,6 +29,9 @@ static Rule rule[] = { \
static Layout layout[] = { \
/* symbol function */ \
{ "[]=", tile }, /* first entry is default */ \
+ { "=[]", tileleft }, \
+ { "TTT", bstackportrait }, \
+ { "===", bstacklandscape }, \
{ "><>", floating }, \
};
#define MASTERWIDTH 600 /* master width per thousand */
Only in dwm009: config.h
Only in dwm009: draw.o
Only in dwm009: dwm
diff -up dwm-4.2/dwm.h dwm009/dwm.h
--- dwm-4.2/dwm.h 2007-05-30 07:20:42.000000000 -0300
+++ dwm009/dwm.h 2007-07-05 16:28:18.000000000 -0300
@@ -121,6 +121,7 @@ void floating(void); /* arranges all w
void focusclient(const char *arg); /* focuses next(1)/previous(-1) visible client */
void incmasterw(const char *arg); /* increments the master width with arg's index value */
void incnmaster(const char *arg); /* increments nmaster with arg's index value */
+void incfocusedtilew(const char *arg); /* increments focused tile width with arg's index value */
void initlayouts(void); /* initialize layout array */
Client *nexttiled(Client *c); /* returns tiled successor of c */
void restack(void); /* restores z layers of all clients */
Only in dwm009: event.o
diff -up dwm-4.2/layout.c dwm009/layout.c
--- dwm-4.2/layout.c 2007-05-30 07:20:42.000000000 -0300
+++ dwm009/layout.c 2007-07-08 19:39:36.000000000 -0300
@@ -28,7 +28,7 @@ unban(Client *c) {
}
static void
-tile(void) {
+_tile(const Bool right) {
unsigned int i, n, nx, ny, nw, nh, mw, mh, tw, th;
Client *c;
@@ -49,6 +49,8 @@ tile(void) {
nx = wax;
ny = way;
if(i < nmaster) {
+ if(!right)
+ nx += tw;
ny += i * mh;
nw = mw - 2 * c->border;
nh = mh;
@@ -57,7 +59,8 @@ tile(void) {
nh -= 2 * c->border;
}
else { /* tile window */
- nx += mw;
+ if(right)
+ nx += mw;
nw = tw - 2 * c->border;
if(th > 2 * c->border) {
ny += (i - nmaster) * th;
@@ -78,6 +81,180 @@ tile(void) {
restack();
}
+// array com os ajustes de largura para cada janela
+#define numero_maximo_de_janelas 1000
+int nxadjust[numero_maximo_de_janelas];
+int nxadjustset = 0;
+int lastwindow = 0;
+
+
+void
+incfocusedtilew(const char *arg)
+{
+ int i;
+ int newadj;
+ Client *c;
+
+ //if(!arg)return;
+
+ /* reseta os ajustes de largura para padrao*/
+ if(arg == "reset")
+ {
+ /*if(nxadjustset == 0) printf("Initializing nxadjust array...\n");
+ else printf("Resetting nxadjust array...\n");*/
+
+ for(i = 0;i < numero_maximo_de_janelas;i++)
+ {
+ nxadjust[i] = 0;
+
+ }
+ return;
+ }
+ /* arg e um numero, entao descobrir qual o numero da janela focada e botar o ajuste no array */
+
+ newadj = atoi(arg);
+ for(i = 0, c = clients; c; c = c->next)
+ {
+ if(c == sel)
+ {
+ /*printf("Adjusting the width of the focused window by %i pixels...",newadj);
+ printf("The window being adjusted is the number: %i",i); */
+ nxadjust[i] += newadj;
+ lt->arrange();
+ return;
+ }
+ i++;
+ }
+
+}
+
+void GetLastWindowNumber()
+{
+ int p;
+ Client *c;
+
+ for(p = 0, c = clients; c; c = c->next)
+ {
+ p++;
+ }
+ lastwindow = (p - 1);
+
+}
+
+static void
+_bstack(const Bool portrait) {
+ unsigned int i, n, nx, ny, nw, nh, mw, mh, tw, th;
+ Client *c;
+
+ int beforelastwindow;
+
+ if(nxadjustset == 0)
+ {
+ // inicializa todos as posicoes do array nxadjust para 0
+ incfocusedtilew("reset");
+ nxadjustset = 1;
+ }
+// Pega a ultima janela
+ GetLastWindowNumber();
+// A penultima janela
+ beforelastwindow = (lastwindow - 1);
+
+ for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next))
+ n++;
+ /* window geoms */
+ mh = (n > nmaster) ? ((wah * masterw) / 1000) / nmaster : wah / (n > 0 ? n : 1);
+ mw = waw;
+ th = (n > nmaster) ? ((wah * (1000 - masterw)) / 1000) / (portrait ? 1 : n - nmaster) : 0;
+ tw = (n > nmaster) ? waw / (portrait ? n - nmaster : 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 < nmaster) {
+ ny += i * mh;
+
+ nw = mw - 2 * c->border;
+ nh = mh - 2 * c->border;
+ }
+ else if(portrait) { /* portrait bstack tiles */
+ nx += (i - nmaster) * tw;
+
+ if(i != 0) nx += nxadjust[i-1];
+
+ ny += mh * nmaster;
+ nw = tw - 2 * c->border;
+
+ if(i != 0 ) nw -= nxadjust[i-1];
+
+ nw += nxadjust[i];
+
+
+ if(nw < 32) nw = 32;
+ if(i != 0)
+ {
+ if(i == lastwindow || i == beforelastwindow)
+ {
+
+ if(i == lastwindow)
+ {
+ nx -=nxadjust[i]; /* ltima janela */
+ nw += nxadjust[i];
+ }
+ else
+ {
+ nw -=nxadjust[i+1]; /* a penltima janela */
+
+ }
+ }
+ }
+ nh = th - 2 * c->border + 1;
+ } else { /* landscape bstack tiles */
+ ny += mh * nmaster;
+ nw = tw - 2 * c->border;
+ if(th > 2 * c->border) {
+ ny += (i - nmaster) * th;
+ nh = th - 2 * c->border;
+ if (i == n - 1)
+ nh += (n > nmaster) ? wah - mh - th * (n - nmaster) : 0;
+ }
+ else /* fallback if th <= 2 * c->border */
+ nh = wah - 2 * c->border;
+ }
+ resize(c, nx, ny, nw, nh, False);
+ i++;
+ }
+ else
+ ban(c);
+ if(!sel || !isvisible(sel))
+ focus(NULL);
+ restack();
+}
+
+static void
+tile(void) {
+ _tile(True);
+}
+
+static void
+tileleft(void) {
+ _tile(False);
+}
+
+static void
+bstackportrait(void) {
+ _bstack(True);
+}
+
+static void
+bstacklandscape(void) {
+ _bstack(False);
+}
+
LAYOUTS
/* extern */
@@ -123,10 +300,12 @@ focusclient(const char *arg) {
}
}
+
+
void
incmasterw(const char *arg) {
int i;
- if(lt->arrange != tile)
+ if(lt->arrange == floating)
return;
if(!arg)
masterw = MASTERWIDTH;
@@ -148,7 +327,7 @@ incnmaster(const char *arg) {
nmaster = NMASTER;
else {
i = atoi(arg);
- if((lt->arrange != tile) || (nmaster + i < 1)
+ if((lt->arrange == floating) || (nmaster + i < 1)
|| (wah / (nmaster + i) <= 2 * BORDERPX))
return;
nmaster += i;
Only in dwm009: layout.o
Only in dwm009: main.o
Only in dwm009: tag.o
Only in dwm009: util.o