forked from mirror/dwm
fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
- optimised drawbar() and arrange() handling for multiple monitors, arrange only arranges the relevant monitors when applicable, same with drawbar - need to release 5.7.1
This commit is contained in:
parent
0b72be924d
commit
9e8dd3479d
2 changed files with 39 additions and 29 deletions
|
@ -1,5 +1,5 @@
|
||||||
# dwm version
|
# dwm version
|
||||||
VERSION = 5.7
|
VERSION = 5.7.1
|
||||||
|
|
||||||
# Customize below to fit your system
|
# Customize below to fit your system
|
||||||
|
|
||||||
|
|
66
dwm.c
66
dwm.c
|
@ -152,7 +152,8 @@ typedef struct {
|
||||||
/* function declarations */
|
/* function declarations */
|
||||||
static void applyrules(Client *c);
|
static void applyrules(Client *c);
|
||||||
static Bool applysizehints(Client *c, int *x, int *y, int *w, int *h, Bool interact);
|
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 attach(Client *c);
|
||||||
static void attachstack(Client *c);
|
static void attachstack(Client *c);
|
||||||
static void buttonpress(XEvent *e);
|
static void buttonpress(XEvent *e);
|
||||||
|
@ -379,18 +380,24 @@ applysizehints(Client *c, int *x, int *y, int *w, int *h, Bool interact) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
arrange(void) {
|
arrange(Monitor *m) {
|
||||||
Monitor *m;
|
if(m)
|
||||||
|
showhide(m->stack);
|
||||||
for(m = mons; m; m = m->next)
|
else for(m = mons; m; m = m->next)
|
||||||
showhide(m->stack);
|
showhide(m->stack);
|
||||||
focus(NULL);
|
focus(NULL);
|
||||||
for(m = mons; m; m = m->next) {
|
if(m)
|
||||||
strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol);
|
arrangemon(m);
|
||||||
if(m->lt[m->sellt]->arrange)
|
else for(m = mons; m; m = m->next)
|
||||||
m->lt[m->sellt]->arrange(m);
|
arrangemon(m);
|
||||||
restack(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
|
void
|
||||||
|
@ -546,7 +553,7 @@ configurenotify(XEvent *e) {
|
||||||
updatebars();
|
updatebars();
|
||||||
for(m = mons; m; m = m->next)
|
for(m = mons; m; m = m->next)
|
||||||
XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh);
|
XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh);
|
||||||
arrange();
|
arrange(NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1139,7 +1146,7 @@ manage(Window w, XWindowAttributes *wa) {
|
||||||
XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /* some windows require this */
|
XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /* some windows require this */
|
||||||
XMapWindow(dpy, c->win);
|
XMapWindow(dpy, c->win);
|
||||||
setclientstate(c, NormalState);
|
setclientstate(c, NormalState);
|
||||||
arrange();
|
arrange(c->mon);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1265,7 +1272,7 @@ propertynotify(XEvent *e) {
|
||||||
case XA_WM_TRANSIENT_FOR:
|
case XA_WM_TRANSIENT_FOR:
|
||||||
XGetTransientForHint(dpy, c->win, &trans);
|
XGetTransientForHint(dpy, c->win, &trans);
|
||||||
if(!c->isfloating && (c->isfloating = (wintoclient(trans) != NULL)))
|
if(!c->isfloating && (c->isfloating = (wintoclient(trans) != NULL)))
|
||||||
arrange();
|
arrange(c->mon);
|
||||||
break;
|
break;
|
||||||
case XA_WM_NORMAL_HINTS:
|
case XA_WM_NORMAL_HINTS:
|
||||||
updatesizehints(c);
|
updatesizehints(c);
|
||||||
|
@ -1360,7 +1367,7 @@ restack(Monitor *m) {
|
||||||
XEvent ev;
|
XEvent ev;
|
||||||
XWindowChanges wc;
|
XWindowChanges wc;
|
||||||
|
|
||||||
drawbars();
|
drawbar(m);
|
||||||
if(!m->sel)
|
if(!m->sel)
|
||||||
return;
|
return;
|
||||||
if(m->sel->isfloating || !m->lt[m->sellt]->arrange)
|
if(m->sel->isfloating || !m->lt[m->sellt]->arrange)
|
||||||
|
@ -1427,7 +1434,7 @@ sendmon(Client *c, Monitor *m) {
|
||||||
attach(c);
|
attach(c);
|
||||||
attachstack(c);
|
attachstack(c);
|
||||||
focus(NULL);
|
focus(NULL);
|
||||||
arrange();
|
arrange(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1442,12 +1449,14 @@ void
|
||||||
setlayout(const Arg *arg) {
|
setlayout(const Arg *arg) {
|
||||||
if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
|
if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
|
||||||
selmon->sellt ^= 1;
|
selmon->sellt ^= 1;
|
||||||
if(arg && arg->v)
|
if(arg && arg->v) {
|
||||||
selmon->lt[selmon->sellt] = (Layout *)arg->v;
|
selmon->lt[selmon->sellt] = (Layout *)arg->v;
|
||||||
|
strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol);
|
||||||
|
}
|
||||||
if(selmon->sel)
|
if(selmon->sel)
|
||||||
arrange();
|
arrange(selmon);
|
||||||
else
|
else
|
||||||
drawbars();
|
drawbar(selmon);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* arg > 1.0 will set mfact absolutly */
|
/* arg > 1.0 will set mfact absolutly */
|
||||||
|
@ -1461,7 +1470,7 @@ setmfact(const Arg *arg) {
|
||||||
if(f < 0.1 || f > 0.9)
|
if(f < 0.1 || f > 0.9)
|
||||||
return;
|
return;
|
||||||
selmon->mfact = f;
|
selmon->mfact = f;
|
||||||
arrange();
|
arrange(selmon);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1558,7 +1567,7 @@ void
|
||||||
tag(const Arg *arg) {
|
tag(const Arg *arg) {
|
||||||
if(selmon->sel && arg->ui & TAGMASK) {
|
if(selmon->sel && arg->ui & TAGMASK) {
|
||||||
selmon->sel->tags = arg->ui & TAGMASK;
|
selmon->sel->tags = arg->ui & TAGMASK;
|
||||||
arrange();
|
arrange(selmon);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1615,7 +1624,7 @@ togglebar(const Arg *arg) {
|
||||||
selmon->showbar = !selmon->showbar;
|
selmon->showbar = !selmon->showbar;
|
||||||
updatebarpos(selmon);
|
updatebarpos(selmon);
|
||||||
XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
|
XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
|
||||||
arrange();
|
arrange(selmon);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1626,7 +1635,7 @@ togglefloating(const Arg *arg) {
|
||||||
if(selmon->sel->isfloating)
|
if(selmon->sel->isfloating)
|
||||||
resize(selmon->sel, selmon->sel->x, selmon->sel->y,
|
resize(selmon->sel, selmon->sel->x, selmon->sel->y,
|
||||||
selmon->sel->w, selmon->sel->h, False);
|
selmon->sel->w, selmon->sel->h, False);
|
||||||
arrange();
|
arrange(selmon);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1638,7 +1647,7 @@ toggletag(const Arg *arg) {
|
||||||
newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
|
newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
|
||||||
if(newtags) {
|
if(newtags) {
|
||||||
selmon->sel->tags = newtags;
|
selmon->sel->tags = newtags;
|
||||||
arrange();
|
arrange(selmon);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1648,7 +1657,7 @@ toggleview(const Arg *arg) {
|
||||||
|
|
||||||
if(newtagset) {
|
if(newtagset) {
|
||||||
selmon->tagset[selmon->seltags] = newtagset;
|
selmon->tagset[selmon->seltags] = newtagset;
|
||||||
arrange();
|
arrange(selmon);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1663,6 +1672,7 @@ unfocus(Client *c) {
|
||||||
|
|
||||||
void
|
void
|
||||||
unmanage(Client *c, Bool destroyed) {
|
unmanage(Client *c, Bool destroyed) {
|
||||||
|
Monitor *m = c->mon;
|
||||||
XWindowChanges wc;
|
XWindowChanges wc;
|
||||||
|
|
||||||
/* The server grab construct avoids race conditions. */
|
/* The server grab construct avoids race conditions. */
|
||||||
|
@ -1681,7 +1691,7 @@ unmanage(Client *c, Bool destroyed) {
|
||||||
}
|
}
|
||||||
free(c);
|
free(c);
|
||||||
focus(NULL);
|
focus(NULL);
|
||||||
arrange();
|
arrange(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1908,7 +1918,7 @@ view(const Arg *arg) {
|
||||||
selmon->seltags ^= 1; /* toggle sel tagset */
|
selmon->seltags ^= 1; /* toggle sel tagset */
|
||||||
if(arg->ui & TAGMASK)
|
if(arg->ui & TAGMASK)
|
||||||
selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
|
selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
|
||||||
arrange();
|
arrange(selmon);
|
||||||
}
|
}
|
||||||
|
|
||||||
Client *
|
Client *
|
||||||
|
@ -1986,7 +1996,7 @@ zoom(const Arg *arg) {
|
||||||
detach(c);
|
detach(c);
|
||||||
attach(c);
|
attach(c);
|
||||||
focus(c);
|
focus(c);
|
||||||
arrange();
|
arrange(c->mon);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
Loading…
Reference in a new issue