equal
deleted
inserted
replaced
127 c->next = c->prev = NULL; |
127 c->next = c->prev = NULL; |
128 } |
128 } |
129 |
129 |
130 void |
130 void |
131 focus(Client *c) { |
131 focus(Client *c) { |
132 if(c && !isvisible(c)) |
132 if( !c && selscreen || c && !isvisible(c)) |
133 return; |
133 for(c = stack; c && !isvisible(c); c = c->snext); |
134 if(sel && sel != c) { |
134 if(sel && sel != c) { |
135 grabbuttons(sel, False); |
135 grabbuttons(sel, False); |
136 XSetWindowBorder(dpy, sel->win, dc.norm[ColBorder]); |
136 XSetWindowBorder(dpy, sel->win, dc.norm[ColBorder]); |
137 } |
137 } |
138 if(c) { |
138 if(c) { |
148 XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]); |
148 XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]); |
149 XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); |
149 XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); |
150 } |
150 } |
151 else |
151 else |
152 XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); |
152 XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); |
153 } |
|
154 |
|
155 void |
|
156 focustopvisible(void) { |
|
157 Client *c; |
|
158 |
|
159 for(c = stack; c && !isvisible(c); c = c->snext); |
|
160 focus(c); |
|
161 } |
153 } |
162 |
154 |
163 void |
155 void |
164 killclient(const char *arg) { |
156 killclient(const char *arg) { |
165 XEvent ev; |
157 XEvent ev; |
228 attachstack(c); |
220 attachstack(c); |
229 c->isbanned = True; |
221 c->isbanned = True; |
230 XMoveWindow(dpy, w, c->x + 2 * sw, c->y); |
222 XMoveWindow(dpy, w, c->x + 2 * sw, c->y); |
231 XMapWindow(dpy, w); |
223 XMapWindow(dpy, w); |
232 setclientstate(c, NormalState); |
224 setclientstate(c, NormalState); |
233 if(isvisible(c)) |
225 focus(c); |
234 focus(c); |
|
235 lt->arrange(); |
226 lt->arrange(); |
236 } |
227 } |
237 |
228 |
238 void |
229 void |
239 resize(Client *c, int x, int y, int w, int h, Bool sizehints) { |
230 resize(Client *c, int x, int y, int w, int h, Bool sizehints) { |
399 XSetErrorHandler(xerrordummy); |
390 XSetErrorHandler(xerrordummy); |
400 XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */ |
391 XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */ |
401 detach(c); |
392 detach(c); |
402 detachstack(c); |
393 detachstack(c); |
403 if(sel == c) |
394 if(sel == c) |
404 focustopvisible(); |
395 focus(NULL); |
405 XUngrabButton(dpy, AnyButton, AnyModifier, c->win); |
396 XUngrabButton(dpy, AnyButton, AnyModifier, c->win); |
406 setclientstate(c, WithdrawnState); |
397 setclientstate(c, WithdrawnState); |
407 free(c->tags); |
398 free(c->tags); |
408 free(c); |
399 free(c); |
409 XSync(dpy, False); |
400 XSync(dpy, False); |