XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
}
+void
+focustopvisible(void) {
+ Client *c;
+
+ for(c = stack; c && !isvisible(c); c = c->snext);
+ focus(c);
+}
+
void
killclient(const char *arg) {
XEvent ev;
if(!name.nitems)
return;
if(name.encoding == XA_STRING)
- strncpy(c->name, (char *)name.value, sizeof c->name);
+ strncpy(c->name, (char *)name.value, sizeof c->name - 1);
else {
if(XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success
&& n > 0 && *list)
{
- strncpy(c->name, *list, sizeof c->name);
+ strncpy(c->name, *list, sizeof c->name - 1);
XFreeStringList(list);
}
}
+ c->name[sizeof c->name - 1] = '\0';
XFree(name.value);
}
void
unmanage(Client *c) {
- Client *nc;
XWindowChanges wc;
wc.border_width = c->oldborder;
XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */
detach(c);
detachstack(c);
- if(sel == c) {
- for(nc = stack; nc && !isvisible(nc); nc = nc->snext);
- focus(nc);
- }
+ if(sel == c)
+ focustopvisible();
XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
setclientstate(c, WithdrawnState);
free(c->tags);