370 if(c->incw) |
370 if(c->incw) |
371 *w -= *w % c->incw; |
371 *w -= *w % c->incw; |
372 if(c->inch) |
372 if(c->inch) |
373 *h -= *h % c->inch; |
373 *h -= *h % c->inch; |
374 /* restore base dimensions */ |
374 /* restore base dimensions */ |
375 *w += c->basew; |
375 *w = MAX(*w + c->basew, c->minw); |
376 *h += c->baseh; |
376 *h = MAX(*h + c->baseh, c->minh); |
377 *w = MAX(*w, c->minw); |
|
378 *h = MAX(*h, c->minh); |
|
379 if(c->maxw) |
377 if(c->maxw) |
380 *w = MIN(*w, c->maxw); |
378 *w = MIN(*w, c->maxw); |
381 if(c->maxh) |
379 if(c->maxh) |
382 *h = MIN(*h, c->maxh); |
380 *h = MIN(*h, c->maxh); |
383 } |
381 } |
1098 if(!(c = malloc(sizeof(Client)))) |
1096 if(!(c = malloc(sizeof(Client)))) |
1099 die("fatal: could not malloc() %u bytes\n", sizeof(Client)); |
1097 die("fatal: could not malloc() %u bytes\n", sizeof(Client)); |
1100 *c = cz; |
1098 *c = cz; |
1101 c->win = w; |
1099 c->win = w; |
1102 updatetitle(c); |
1100 updatetitle(c); |
1103 if(XGetTransientForHint(dpy, w, &trans)) |
1101 if(XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) { |
1104 t = wintoclient(trans); |
|
1105 if(t) { |
|
1106 c->mon = t->mon; |
1102 c->mon = t->mon; |
1107 c->tags = t->tags; |
1103 c->tags = t->tags; |
1108 } |
1104 } |
1109 else { |
1105 else { |
1110 c->mon = selmon; |
1106 c->mon = selmon; |
1115 c->y = c->oldy = wa->y + c->mon->wy; |
1111 c->y = c->oldy = wa->y + c->mon->wy; |
1116 c->w = c->oldw = wa->width; |
1112 c->w = c->oldw = wa->width; |
1117 c->h = c->oldh = wa->height; |
1113 c->h = c->oldh = wa->height; |
1118 c->oldbw = wa->border_width; |
1114 c->oldbw = wa->border_width; |
1119 if(c->w == c->mon->mw && c->h == c->mon->mh) { |
1115 if(c->w == c->mon->mw && c->h == c->mon->mh) { |
1120 c->isfloating = 1; |
1116 c->isfloating = True; |
1121 c->x = c->mon->mx; |
1117 c->x = c->mon->mx; |
1122 c->y = c->mon->my; |
1118 c->y = c->mon->my; |
1123 c->bw = 0; |
1119 c->bw = 0; |
1124 } |
1120 } |
1125 else { |
1121 else { |
1271 return; /* ignore */ |
1267 return; /* ignore */ |
1272 else if((c = wintoclient(ev->window))) { |
1268 else if((c = wintoclient(ev->window))) { |
1273 switch (ev->atom) { |
1269 switch (ev->atom) { |
1274 default: break; |
1270 default: break; |
1275 case XA_WM_TRANSIENT_FOR: |
1271 case XA_WM_TRANSIENT_FOR: |
1276 XGetTransientForHint(dpy, c->win, &trans); |
1272 if(!c->isfloating && (XGetTransientForHint(dpy, c->win, &trans)) && |
1277 if(!c->isfloating && (c->isfloating = (wintoclient(trans) != NULL))) |
1273 (c->isfloating = (wintoclient(trans)))) |
1278 arrange(c->mon); |
1274 arrange(c->mon); |
1279 break; |
1275 break; |
1280 case XA_WM_NORMAL_HINTS: |
1276 case XA_WM_NORMAL_HINTS: |
1281 updatesizehints(c); |
1277 updatesizehints(c); |
1282 break; |
1278 break; |
1305 XChangeProperty(dpy, cme->window, netatom[NetWMState], XA_ATOM, 32, |
1301 XChangeProperty(dpy, cme->window, netatom[NetWMState], XA_ATOM, 32, |
1306 PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1); |
1302 PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1); |
1307 c->oldstate = c->isfloating; |
1303 c->oldstate = c->isfloating; |
1308 c->oldbw = c->bw; |
1304 c->oldbw = c->bw; |
1309 c->bw = 0; |
1305 c->bw = 0; |
1310 c->isfloating = 1; |
1306 c->isfloating = True; |
1311 resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh); |
1307 resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh); |
1312 XRaiseWindow(dpy, c->win); |
1308 XRaiseWindow(dpy, c->win); |
1313 } |
1309 } |
1314 else { |
1310 else { |
1315 XChangeProperty(dpy, cme->window, netatom[NetWMState], XA_ATOM, 32, |
1311 XChangeProperty(dpy, cme->window, netatom[NetWMState], XA_ATOM, 32, |