} Regs;
struct Monitor {
- unsigned int id;
int sx, sy, sw, sh, wax, way, wah, waw;
double mwfact;
Bool *seltags;
/* function declarations */
void applyrules(Client *c);
-void arrange(void);
+void arrange(Monitor *m);
void attach(Client *c);
void attachstack(Client *c);
void ban(Client *c);
}
void
-arrange(void) {
+arrange(Monitor *m) {
+ unsigned int i;
Client *c;
for(c = clients; c; c = c->next)
else
ban(c);
- selmonitor->layout->arrange(selmonitor);
+ if(m)
+ m->layout->arrange(m);
+ else
+ for(i = 0; i < mcount; i++)
+ monitors[i].layout->arrange(&monitors[i]);
focus(NULL);
- restack(selmonitor);
+ restack(m);
}
void
dc.drawable = XCreatePixmap(dpy, root, DisplayWidth(root, screen), bh, DefaultDepth(dpy, screen));
XResizeWindow(dpy, m->barwin, m->sw, bh);
updatebarpos(m);
- arrange();
+ arrange(m);
}
}
applyrules(c);
- m = selmonitor;
+ m = c->monitor;
c->x = wa->x + m->sx;
c->y = wa->y + m->sy;
ban(c);
XMapWindow(dpy, c->win);
setclientstate(c, NormalState);
- arrange();
+ arrange(m);
}
void
ny = m->way;
else if(abs((m->way + m->wah) - (ny + c->h + 2 * c->border)) < SNAP)
ny = m->way + m->wah - c->h - 2 * c->border;
- if((m->layout->arrange != floating) && (abs(nx - c->x) > SNAP || abs(ny - c->y) > SNAP))
+ if(!c->isfloating && (m->layout->arrange != floating) && (abs(nx - c->x) > SNAP || abs(ny - c->y) > SNAP))
togglefloating(NULL);
if((m->layout->arrange == floating) || c->isfloating)
resize(c, nx, ny, c->w, c->h, False);
case XA_WM_TRANSIENT_FOR:
XGetTransientForHint(dpy, c->win, &trans);
if(!c->isfloating && (c->isfloating = (getclient(trans) != NULL)))
- arrange();
+ arrange(c->monitor);
break;
case XA_WM_NORMAL_HINTS:
updatesizehints(c);
memcpy(c->tags, zerotags, sizeof zerotags);
applyrules(c);
}
- arrange();
+ arrange(NULL);
}
void
XWindowChanges wc;
m = c->monitor;
-
if(sizehints) {
/* set minimum possible */
if (w < 1)
x = m->sx;
if(y + h + 2 * c->border < m->sy)
y = m->sy;
+ fprintf(stderr, "resize %d %d %d %d (%d %d %d %d)\n", x, y , w, h, m->sx, m->sy, m->sw, m->sh);
if(c->x != x || c->y != y || c->w != w || c->h != h) {
c->x = wc.x = x;
c->y = wc.y = y;
nw = 1;
if((nh = ev.xmotion.y - ocy - 2 * c->border + 1) <= 0)
nh = 1;
- if((m->layout->arrange != floating) && (abs(nw - c->w) > SNAP || abs(nh - c->h) > SNAP))
+ if(!c->isfloating && (m->layout->arrange != floating) && (abs(nw - c->w) > SNAP || abs(nh - c->h) > SNAP))
togglefloating(NULL);
if((m->layout->arrange == floating) || c->isfloating)
resize(c, c->x, c->y, nw, nh, True);
m->layout = &layouts[i];
}
if(sel)
- arrange();
+ arrange(m);
else
drawbar(m);
}
else if(m->mwfact > 0.9)
m->mwfact = 0.9;
}
- arrange();
+ arrange(m);
}
void
for(i = 0; i < mcount; i++) {
/* init geometry */
m = &monitors[i];
- m->id = i;
- if (mcount != 1 && isxinerama) {
+ if(mcount != 1 && isxinerama) {
m->sx = info[i].x_org;
m->sy = info[i].y_org;
m->sw = info[i].width;
for(i = 0; i < LENGTH(tags); i++)
sel->tags[i] = (NULL == arg);
sel->tags[idxoftag(arg)] = True;
- arrange();
+ arrange(sel->monitor);
}
unsigned int
Client *c, *mc;
domwfact = dozoom = True;
-
- nx = ny = nw = 0; /* gcc stupidity requires this */
-
+ nx = m->wax;
+ ny = m->way;
+ nw = 0;
for(n = 0, c = nexttiled(clients, m); c; c = nexttiled(c->next, m))
n++;
else
nh = th - 2 * c->border;
}
+ fprintf(stderr, "tile %d %d %d %d\n", nx, ny, nw, nh);
resize(c, nx, ny, nw, nh, RESIZEHINTS);
if((RESIZEHINTS) && ((c->h < bh) || (c->h > nh) || (c->w < bh) || (c->w > nw)))
/* client doesn't accept size constraints */
resize(c, nx, ny, nw, nh, False);
if(n > 1 && th != m->wah)
ny = c->y + c->h + 2 * c->border;
-
i++;
}
}
+
void
togglebar(const char *arg) {
if(bpos == BarOff)
else
bpos = BarOff;
updatebarpos(monitorat());
- arrange();
+ arrange(monitorat());
}
void
sel->isfloating = !sel->isfloating;
if(sel->isfloating)
resize(sel, sel->x, sel->y, sel->w, sel->h, True);
- arrange();
+ arrange(sel->monitor);
}
void
for(j = 0; j < LENGTH(tags) && !sel->tags[j]; j++);
if(j == LENGTH(tags))
sel->tags[i] = True; /* at least one tag must be enabled */
- arrange();
+ arrange(sel->monitor);
}
void
toggleview(const char *arg) {
unsigned int i, j;
-
Monitor *m = monitorat();
i = idxoftag(arg);
for(j = 0; j < LENGTH(tags) && !m->seltags[j]; j++);
if(j == LENGTH(tags))
m->seltags[i] = True; /* at least one tag must be viewed */
- arrange();
+ arrange(m);
}
void
void
unmanage(Client *c) {
+ Monitor *m = c->monitor;
XWindowChanges wc;
wc.border_width = c->oldborder;
XSync(dpy, False);
XSetErrorHandler(xerror);
XUngrabServer(dpy);
- arrange();
+ arrange(m);
}
void
if(memcmp(m->seltags, tmp, sizeof initags) != 0) {
memcpy(m->prevtags, m->seltags, sizeof initags);
memcpy(m->seltags, tmp, sizeof initags);
- arrange();
+ arrange(m);
}
}
memcpy(tmp, m->seltags, sizeof initags);
memcpy(m->seltags, m->prevtags, sizeof initags);
memcpy(m->prevtags, tmp, sizeof initags);
- arrange();
+ arrange(m);
}
void
detach(c);
attach(c);
focus(c);
- arrange();
+ arrange(c->monitor);
}
void
memcpy(sel->tags, sel->monitor->seltags, sizeof initags);
resize(sel, sel->monitor->wax, sel->monitor->way, sel->w, sel->h, True);
- arrange();
+ arrange(sel->monitor);
}
void
int
main(int argc, char *argv[]) {
if(argc == 2 && !strcmp("-v", argv[1]))
- eprint("dwm-"VERSION", © 2006-2008 Anselm R. Garbe, Sander van Dijk, "
- "Jukka Salmi, Premysl Hruby, Szabolcs Nagy, Christof Musik\n");
+ eprint("dwm-"VERSION", © 2006-2008 dwm engineers, see LICENSE for details\n");
else if(argc != 1)
eprint("usage: dwm [-v]\n");