tfixed the layout symbol bug reported by Nibble (but using a different approach… | |
git clone git://src.adamsgaard.dk/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 | |
t@@ -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 | |
t@@ -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); | |
t@@ -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 | |
t@@ -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); | |
} | |
} | |
} | |
t@@ -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 | |
t@@ -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); | |
t@@ -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) | |
t@@ -1427,7 +1434,7 @@ sendmon(Client *c, Monitor *m) { | |
attach(c); | |
attachstack(c); | |
focus(NULL); | |
- arrange(); | |
+ arrange(NULL); | |
} | |
void | |
t@@ -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 */ | |
t@@ -1461,7 +1470,7 @@ setmfact(const Arg *arg) { | |
if(f < 0.1 || f > 0.9) | |
return; | |
selmon->mfact = f; | |
- arrange(); | |
+ arrange(selmon); | |
} | |
void | |
t@@ -1558,7 +1567,7 @@ void | |
tag(const Arg *arg) { | |
if(selmon->sel && arg->ui & TAGMASK) { | |
selmon->sel->tags = arg->ui & TAGMASK; | |
- arrange(); | |
+ arrange(selmon); | |
} | |
} | |
t@@ -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 | |
t@@ -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 | |
t@@ -1638,7 +1647,7 @@ toggletag(const Arg *arg) { | |
newtags = selmon->sel->tags ^ (arg->ui & TAGMASK); | |
if(newtags) { | |
selmon->sel->tags = newtags; | |
- arrange(); | |
+ arrange(selmon); | |
} | |
} | |
t@@ -1648,7 +1657,7 @@ toggleview(const Arg *arg) { | |
if(newtagset) { | |
selmon->tagset[selmon->seltags] = newtagset; | |
- arrange(); | |
+ arrange(selmon); | |
} | |
} | |
t@@ -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. */ | |
t@@ -1681,7 +1691,7 @@ unmanage(Client *c, Bool destroyed) { | |
} | |
free(c); | |
focus(NULL); | |
- arrange(); | |
+ arrange(m); | |
} | |
void | |
t@@ -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 * | |
t@@ -1986,7 +1996,7 @@ zoom(const Arg *arg) { | |
detach(c); | |
attach(c); | |
focus(c); | |
- arrange(); | |
+ arrange(c->mon); | |
} | |
int |