aewl
diff client.c @ 400:052657ff2e7b
applied Sanders max_and_focus.patch
author | Anselm R. Garbe <arg@10kloc.org> |
---|---|
date | Mon, 04 Sep 2006 08:55:49 +0200 |
parents | b00cc483d13b |
children | 6413ea66b1c2 |
line diff
1.1 --- a/client.c Fri Sep 01 15:31:59 2006 +0200 1.2 +++ b/client.c Mon Sep 04 08:55:49 2006 +0200 1.3 @@ -82,22 +82,29 @@ 1.4 void 1.5 focus(Client *c) 1.6 { 1.7 - Client *old = sel; 1.8 + Client *old; 1.9 1.10 if(!issel) 1.11 return; 1.12 if(!sel) 1.13 sel = c; 1.14 else if(sel != c) { 1.15 - if(sel->ismax) 1.16 + if(maximized) 1.17 togglemax(NULL); 1.18 + old = sel; 1.19 sel = c; 1.20 - grabbuttons(old, False); 1.21 - drawtitle(old); 1.22 + if(old) { 1.23 + grabbuttons(old, False); 1.24 + drawtitle(old); 1.25 + } 1.26 } 1.27 - grabbuttons(c, True); 1.28 - drawtitle(c); 1.29 - XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); 1.30 + if(c) { 1.31 + grabbuttons(c, True); 1.32 + drawtitle(c); 1.33 + XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); 1.34 + } 1.35 + else 1.36 + XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); 1.37 } 1.38 1.39 Client * 1.40 @@ -247,8 +254,6 @@ 1.41 clients = c; 1.42 1.43 settitle(c); 1.44 - if(isvisible(c)) 1.45 - sel = c; 1.46 arrange(NULL); 1.47 XMapWindow(dpy, c->win); 1.48 XMapWindow(dpy, c->twin); 1.49 @@ -366,12 +371,13 @@ 1.50 togglemax(Arg *arg) 1.51 { 1.52 int ox, oy, ow, oh; 1.53 + Client *c; 1.54 XEvent ev; 1.55 1.56 if(!sel) 1.57 return; 1.58 1.59 - if((sel->ismax = !sel->ismax)) { 1.60 + if((maximized = !maximized)) { 1.61 ox = sel->x; 1.62 oy = sel->y; 1.63 ow = sel->w; 1.64 @@ -382,6 +388,9 @@ 1.65 sel->h = sh - 2 - bh; 1.66 1.67 restack(); 1.68 + for(c = getnext(clients); c; c = getnext(c->next)) 1.69 + if(c != sel) 1.70 + ban(c); 1.71 resize(sel, arrange == dofloat, TopLeft); 1.72 1.73 sel->x = ox; 1.74 @@ -390,37 +399,36 @@ 1.75 sel->h = oh; 1.76 } 1.77 else 1.78 - resize(sel, False, TopLeft); 1.79 + arrange(NULL); 1.80 while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); 1.81 } 1.82 1.83 void 1.84 unmanage(Client *c) 1.85 { 1.86 - Client *tc; 1.87 + Client *tc, *fc; 1.88 Window trans; 1.89 XGrabServer(dpy); 1.90 XSetErrorHandler(xerrordummy); 1.91 1.92 - XGetTransientForHint(dpy, c->win, &trans); 1.93 + detach(c); 1.94 + if(sel == c) { 1.95 + XGetTransientForHint(dpy, c->win, &trans); 1.96 + if(trans && (tc = getclient(trans)) && isvisible(tc)) 1.97 + fc = tc; 1.98 + else 1.99 + fc = getnext(clients); 1.100 + focus(fc); 1.101 + } 1.102 1.103 XUngrabButton(dpy, AnyButton, AnyModifier, c->win); 1.104 XDestroyWindow(dpy, c->twin); 1.105 1.106 - detach(c); 1.107 - if(sel == c) { 1.108 - if(trans && (tc = getclient(trans)) && isvisible(tc)) 1.109 - sel = tc; 1.110 - else 1.111 - sel = getnext(clients); 1.112 - } 1.113 free(c->tags); 1.114 free(c); 1.115 1.116 XSync(dpy, False); 1.117 XSetErrorHandler(xerror); 1.118 XUngrabServer(dpy); 1.119 - if(sel) 1.120 - focus(sel); 1.121 arrange(NULL); 1.122 }