| fixed the layout symbol bug reported by Nibble (but using a different approach … | |
| git clone git://git.suckless.org/dwm | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| commit 9e8dd3479da9f484c9aa37adcd327989149e89ef | |
| parent 0b72be924d3f0daa63e45a09951d6cb6cc9b335e | |
| Author: Anselm R Garbe <[email protected]> | |
| Date: Sun, 27 Sep 2009 10:31:14 +0100 | |
| fixed the layout symbol bug reported by Nibble (but using a different approach … | |
| - optimised drawbar() and arrange() handling for multiple monitors, arrange onl… | |
| - need to release 5.7.1 | |
| Diffstat: | |
| M config.mk | 2 +- | |
| M dwm.c | 66 ++++++++++++++++++-----------… | |
| 2 files changed, 39 insertions(+), 29 deletions(-) | |
| --- | |
| diff --git a/config.mk b/config.mk | |
| @@ -1,5 +1,5 @@ | |
| # dwm version | |
| -VERSION = 5.7 | |
| +VERSION = 5.7.1 | |
| # Customize below to fit your system | |
| diff --git a/dwm.c b/dwm.c | |
| @@ -152,7 +152,8 @@ typedef struct { | |
| /* function declarations */ | |
| static void applyrules(Client *c); | |
| static Bool applysizehints(Client *c, int *x, int *y, int *w, int *h, Bool int… | |
| -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); | |
| @@ -379,18 +380,24 @@ applysizehints(Client *c, int *x, int *y, int *w, int *h,… | |
| } | |
| 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->ltsymb… | |
| - 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 | |
| @@ -546,7 +553,7 @@ configurenotify(XEvent *e) { | |
| updatebars(); | |
| for(m = mons; m; m = m->next) | |
| XMoveResizeWindow(dpy, m->barwin, m->wx, m->by… | |
| - 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); /* so… | |
| XMapWindow(dpy, c->win); | |
| setclientstate(c, NormalState); | |
| - arrange(); | |
| + arrange(c->mon); | |
| } | |
| void | |
| @@ -1265,7 +1272,7 @@ propertynotify(XEvent *e) { | |
| case XA_WM_TRANSIENT_FOR: | |
| XGetTransientForHint(dpy, c->win, &trans); | |
| if(!c->isfloating && (c->isfloating = (wintoclient(tra… | |
| - arrange(); | |
| + arrange(c->mon); | |
| break; | |
| case XA_WM_NORMAL_HINTS: | |
| updatesizehints(c); | |
| @@ -1360,7 +1367,7 @@ restack(Monitor *m) { | |
| XEvent ev; | |
| XWindowChanges wc; | |
| - drawbars(); | |
| + drawbar(m); | |
| if(!m->sel) | |
| return; | |
| if(m->sel->isfloating || !m->lt[m->sellt]->arrange) | |
| @@ -1427,7 +1434,7 @@ sendmon(Client *c, Monitor *m) { | |
| attach(c); | |
| attachstack(c); | |
| focus(NULL); | |
| - arrange(); | |
| + arrange(NULL); | |
| } | |
| void | |
| @@ -1442,12 +1449,14 @@ 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, s… | |
| + } | |
| if(selmon->sel) | |
| - arrange(); | |
| + arrange(selmon); | |
| else | |
| - drawbars(); | |
| + drawbar(selmon); | |
| } | |
| /* arg > 1.0 will set mfact absolutly */ | |
| @@ -1461,7 +1470,7 @@ setmfact(const Arg *arg) { | |
| if(f < 0.1 || f > 0.9) | |
| return; | |
| selmon->mfact = f; | |
| - arrange(); | |
| + arrange(selmon); | |
| } | |
| void | |
| @@ -1558,7 +1567,7 @@ void | |
| tag(const Arg *arg) { | |
| if(selmon->sel && arg->ui & TAGMASK) { | |
| selmon->sel->tags = arg->ui & TAGMASK; | |
| - arrange(); | |
| + arrange(selmon); | |
| } | |
| } | |
| @@ -1615,7 +1624,7 @@ togglebar(const Arg *arg) { | |
| selmon->showbar = !selmon->showbar; | |
| updatebarpos(selmon); | |
| XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon-… | |
| - arrange(); | |
| + arrange(selmon); | |
| } | |
| void | |
| @@ -1626,7 +1635,7 @@ togglefloating(const Arg *arg) { | |
| if(selmon->sel->isfloating) | |
| resize(selmon->sel, selmon->sel->x, selmon->sel->y, | |
| selmon->sel->w, selmon->sel->h, False); | |
| - arrange(); | |
| + arrange(selmon); | |
| } | |
| void | |
| @@ -1638,7 +1647,7 @@ toggletag(const Arg *arg) { | |
| newtags = selmon->sel->tags ^ (arg->ui & TAGMASK); | |
| if(newtags) { | |
| selmon->sel->tags = newtags; | |
| - arrange(); | |
| + arrange(selmon); | |
| } | |
| } | |
| @@ -1648,7 +1657,7 @@ toggleview(const Arg *arg) { | |
| if(newtagset) { | |
| selmon->tagset[selmon->seltags] = newtagset; | |
| - arrange(); | |
| + arrange(selmon); | |
| } | |
| } | |
| @@ -1663,6 +1672,7 @@ unfocus(Client *c) { | |
| void | |
| unmanage(Client *c, Bool destroyed) { | |
| + Monitor *m = c->mon; | |
| XWindowChanges wc; | |
| /* The server grab construct avoids race conditions. */ | |
| @@ -1681,7 +1691,7 @@ unmanage(Client *c, Bool destroyed) { | |
| } | |
| free(c); | |
| focus(NULL); | |
| - arrange(); | |
| + arrange(m); | |
| } | |
| void | |
| @@ -1908,7 +1918,7 @@ view(const Arg *arg) { | |
| selmon->seltags ^= 1; /* toggle sel tagset */ | |
| if(arg->ui & TAGMASK) | |
| selmon->tagset[selmon->seltags] = arg->ui & TAGMASK; | |
| - arrange(); | |
| + arrange(selmon); | |
| } | |
| Client * | |
| @@ -1986,7 +1996,7 @@ zoom(const Arg *arg) { | |
| detach(c); | |
| attach(c); | |
| focus(c); | |
| - arrange(); | |
| + arrange(c->mon); | |
| } | |
| int |