diff -r 1fa515fbcb90 client.c --- a/client.c Mon May 28 20:59:49 2007 +0200 +++ b/client.c Mon May 28 20:59:50 2007 +0200 @@ -129,8 +129,8 @@ detach(Client *c) { void focus(Client *c) { - if(c && !isvisible(c)) - return; + if( !c && selscreen || c && !isvisible(c)) + for(c = stack; c && !isvisible(c); c = c->snext); if(sel && sel != c) { grabbuttons(sel, False); XSetWindowBorder(dpy, sel->win, dc.norm[ColBorder]); @@ -150,14 +150,6 @@ focus(Client *c) { } else XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); -} - -void -focustopvisible(void) { - Client *c; - - for(c = stack; c && !isvisible(c); c = c->snext); - focus(c); } void @@ -230,8 +222,7 @@ manage(Window w, XWindowAttributes *wa) XMoveWindow(dpy, w, c->x + 2 * sw, c->y); XMapWindow(dpy, w); setclientstate(c, NormalState); - if(isvisible(c)) - focus(c); + focus(c); lt->arrange(); } @@ -401,7 +392,7 @@ unmanage(Client *c) { detach(c); detachstack(c); if(sel == c) - focustopvisible(); + focus(NULL); XUngrabButton(dpy, AnyButton, AnyModifier, c->win); setclientstate(c, WithdrawnState); free(c->tags); diff -r 1fa515fbcb90 dwm.h --- a/dwm.h Mon May 28 20:59:49 2007 +0200 +++ b/dwm.h Mon May 28 20:59:50 2007 +0200 @@ -100,8 +100,7 @@ void attach(Client *c); /* attaches c void attach(Client *c); /* attaches c to global client list */ void configure(Client *c); /* send synthetic configure event */ void detach(Client *c); /* detaches c from global client list */ -void focus(Client *c); /* focus c, c may be NULL */ -void focustopvisible(void); /* focus top visible window on stack */ +void focus(Client *c); /* focus c if visible && !NULL, or focus top visible */ void killclient(const char *arg); /* kill sel nicely */ void manage(Window w, XWindowAttributes *wa); /* manage new client */ void resize(Client *c, int x, int y, diff -r 1fa515fbcb90 event.c --- a/event.c Mon May 28 20:59:49 2007 +0200 +++ b/event.c Mon May 28 20:59:50 2007 +0200 @@ -242,11 +242,11 @@ enternotify(XEvent *e) { if(ev->mode != NotifyNormal || ev->detail == NotifyInferior) return; - if((c = getclient(ev->window)) && isvisible(c)) + if(c = getclient(ev->window)) focus(c); else if(ev->window == root) { selscreen = True; - focustopvisible(); + focus(NULL); } } diff -r 1fa515fbcb90 layout.c --- a/layout.c Mon May 28 20:59:49 2007 +0200 +++ b/layout.c Mon May 28 21:00:59 2007 +0200 @@ -64,8 +64,7 @@ tile(void) { c->isbanned = True; XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); } - if(!sel || !isvisible(sel)) - focustopvisible(); + focus(NULL); restack(); } @@ -88,8 +87,7 @@ floating(void) { c->isbanned = True; XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); } - if(!sel || !isvisible(sel)) - focustopvisible(); + focus(NULL); restack(); }