/* function declarations */
static void applyrules(Client *c);
static Bool applysizehints(Client *c, int *x, int *y, int *w, int *h, Bool interact);
-static void arrange(void);
+static void arrange(Monitor *m);
+static void arrangemon(Monitor *m);
static void attach(Client *c);
static void attachstack(Client *c);
static void buttonpress(XEvent *e);
}
void
-arrange(void) {
- Monitor *m;
-
- for(m = mons; m; m = m->next)
+arrange(Monitor *m) {
+ if(m)
+ showhide(m->stack);
+ else for(m = mons; m; m = m->next)
showhide(m->stack);
focus(NULL);
- for(m = mons; m; m = m->next) {
- strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol);
- if(m->lt[m->sellt]->arrange)
- m->lt[m->sellt]->arrange(m);
- restack(m);
- }
+ if(m)
+ arrangemon(m);
+ else for(m = mons; m; m = m->next)
+ arrangemon(m);
+}
+
+void
+arrangemon(Monitor *m) {
+ strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol);
+ if(m->lt[m->sellt]->arrange)
+ m->lt[m->sellt]->arrange(m);
+ restack(m);
}
void
updatebars();
for(m = mons; m; m = m->next)
XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh);
- arrange();
+ arrange(NULL);
}
}
}
XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /* some windows require this */
XMapWindow(dpy, c->win);
setclientstate(c, NormalState);
- arrange();
+ arrange(c->mon);
}
void
case XA_WM_TRANSIENT_FOR:
XGetTransientForHint(dpy, c->win, &trans);
if(!c->isfloating && (c->isfloating = (wintoclient(trans) != NULL)))
- arrange();
+ arrange(c->mon);
break;
case XA_WM_NORMAL_HINTS:
updatesizehints(c);
XEvent ev;
XWindowChanges wc;
- drawbars();
+ drawbar(m);
if(!m->sel)
return;
if(m->sel->isfloating || !m->lt[m->sellt]->arrange)
attach(c);
attachstack(c);
focus(NULL);
- arrange();
+ arrange(NULL);
}
void
setlayout(const Arg *arg) {
if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
selmon->sellt ^= 1;
- if(arg && arg->v)
+ if(arg && arg->v) {
selmon->lt[selmon->sellt] = (Layout *)arg->v;
+ strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol);
+ }
if(selmon->sel)
- arrange();
+ arrange(selmon);
else
- drawbars();
+ drawbar(selmon);
}
/* arg > 1.0 will set mfact absolutly */
if(f < 0.1 || f > 0.9)
return;
selmon->mfact = f;
- arrange();
+ arrange(selmon);
}
void
tag(const Arg *arg) {
if(selmon->sel && arg->ui & TAGMASK) {
selmon->sel->tags = arg->ui & TAGMASK;
- arrange();
+ arrange(selmon);
}
}
selmon->showbar = !selmon->showbar;
updatebarpos(selmon);
XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
- arrange();
+ arrange(selmon);
}
void
if(selmon->sel->isfloating)
resize(selmon->sel, selmon->sel->x, selmon->sel->y,
selmon->sel->w, selmon->sel->h, False);
- arrange();
+ arrange(selmon);
}
void
newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
if(newtags) {
selmon->sel->tags = newtags;
- arrange();
+ arrange(selmon);
}
}
if(newtagset) {
selmon->tagset[selmon->seltags] = newtagset;
- arrange();
+ arrange(selmon);
}
}
void
unmanage(Client *c, Bool destroyed) {
+ Monitor *m = c->mon;
XWindowChanges wc;
/* The server grab construct avoids race conditions. */
}
free(c);
focus(NULL);
- arrange();
+ arrange(m);
}
void
selmon->seltags ^= 1; /* toggle sel tagset */
if(arg->ui & TAGMASK)
selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
- arrange();
+ arrange(selmon);
}
Client *
detach(c);
attach(c);
focus(c);
- arrange();
+ arrange(c->mon);
}
int