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);
 }
 

Reply via email to