|
|
@ -185,9 +185,11 @@ manage(Window w, XWindowAttributes *wa) { |
|
|
|
c->y = wa->y; |
|
|
|
c->w = wa->width; |
|
|
|
c->h = wa->height; |
|
|
|
c->oldborder = wa->border_width; |
|
|
|
if(c->w == sw && c->h == sh) { |
|
|
|
c->x = sx; |
|
|
|
c->y = sy; |
|
|
|
c->border = wa->border_width; |
|
|
|
} |
|
|
|
else { |
|
|
|
if(c->x + c->w + 2 * c->border > wax + waw) |
|
|
@ -198,15 +200,16 @@ manage(Window w, XWindowAttributes *wa) { |
|
|
|
c->x = wax; |
|
|
|
if(c->y < way) |
|
|
|
c->y = way; |
|
|
|
c->border = BORDERPX; |
|
|
|
} |
|
|
|
wc.border_width = c->border; |
|
|
|
XConfigureWindow(dpy, w, CWBorderWidth, &wc); |
|
|
|
XSetWindowBorder(dpy, w, dc.norm[ColBorder]); |
|
|
|
configure(c); /* propagates border_width, if size doesn't change */ |
|
|
|
updatesizehints(c); |
|
|
|
XSelectInput(dpy, w, |
|
|
|
StructureNotifyMask | PropertyChangeMask | EnterWindowMask); |
|
|
|
grabbuttons(c, False); |
|
|
|
c->border = wc.border_width = (c->w == sw && c->h == sh) ? wa->border_width : BORDERPX; |
|
|
|
XConfigureWindow(dpy, w, CWBorderWidth, &wc); |
|
|
|
XSetWindowBorder(dpy, w, dc.norm[ColBorder]); |
|
|
|
configure(c); /* propagates border_width, if size doesn't change */ |
|
|
|
updatetitle(c); |
|
|
|
if((rettrans = XGetTransientForHint(dpy, w, &trans) == Success)) |
|
|
|
for(t = clients; t && t->win != trans; t = t->next); |
|
|
@ -378,10 +381,13 @@ updatetitle(Client *c) { |
|
|
|
void |
|
|
|
unmanage(Client *c) { |
|
|
|
Client *nc; |
|
|
|
XWindowChanges wc; |
|
|
|
|
|
|
|
wc.border_width = c->oldborder; |
|
|
|
/* The server grab construct avoids race conditions. */ |
|
|
|
XGrabServer(dpy); |
|
|
|
XSetErrorHandler(xerrordummy); |
|
|
|
XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */ |
|
|
|
detach(c); |
|
|
|
detachstack(c); |
|
|
|
if(sel == c) { |
|
|
|