Hi Anselm,
> I reviewed your patch and concluded I can't apply it as is, because
> focus() would be called twice, once on the unmapped window, and then
> on again.
It seems to me that focusing and arranging should be independent
operations. So here comes another patch to remove focus(NULL) from
arrange and add it, if missing, everywhere arrange is called after
either a window might have vanished from selmon's view, or selmon
itself might have vanished.
Regards,
Peter
--- dwm/dwm.c.orig 2011-07-09 01:21:43.924293041 +0200
+++ dwm/dwm.c 2011-07-09 01:25:06.127245938 +0200
@@ -389,7 +389,6 @@ arrange(Monitor *m) {
showhide(m->stack);
else for(m = mons; m; m = m->next)
showhide(m->stack);
- focus(NULL);
if(m)
arrangemon(m);
else for(m = mons; m; m = m->next)
@@ -598,6 +597,7 @@ configurenotify(XEvent *e) {
updatebars();
for(m = mons; m; m = m->next)
XMoveResizeWindow(dpy, m->barwin, m->wx, m->by,
m->ww, bh);
+ focus(NULL);
arrange(NULL);
}
}
@@ -1616,6 +1616,7 @@ void
tag(const Arg *arg) {
if(selmon->sel && arg->ui & TAGMASK) {
selmon->sel->tags = arg->ui & TAGMASK;
+ focus(NULL);
arrange(selmon);
}
}
@@ -1696,6 +1697,7 @@ toggletag(const Arg *arg) {
newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
if(newtags) {
selmon->sel->tags = newtags;
+ focus(NULL);
arrange(selmon);
}
}
@@ -1706,6 +1708,7 @@ toggleview(const Arg *arg) {
if(newtagset) {
selmon->tagset[selmon->seltags] = newtagset;
+ focus(NULL);
arrange(selmon);
}
}
@@ -1971,6 +1974,7 @@ view(const Arg *arg) {
selmon->seltags ^= 1; /* toggle sel tagset */
if(arg->ui & TAGMASK)
selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
+ focus(NULL);
arrange(selmon);
}