| 16 |
16 |
|
{ |
| 17 |
17 |
|
int i; |
| 18 |
18 |
|
|
| 19 |
|
- |
c->bw = 0; |
|
19 |
+ |
c->tw = 0; |
| 20 |
20 |
|
for(i = 0; i < TLast; i++) |
| 21 |
21 |
|
if(c->tags[i]) |
| 22 |
|
- |
c->bw += textw(c->tags[i]); |
| 23 |
|
- |
c->bw += textw(c->name); |
| 24 |
|
- |
if(c->bw > *c->w) |
| 25 |
|
- |
c->bw = *c->w + 2; |
| 26 |
|
- |
c->bx = *c->x + *c->w - c->bw + 2; |
| 27 |
|
- |
c->by = *c->y; |
|
22 |
+ |
c->tw += textw(c->tags[i]); |
|
23 |
+ |
c->tw += textw(c->name); |
|
24 |
+ |
if(c->tw > c->w) |
|
25 |
+ |
c->tw = c->w + 2; |
|
26 |
+ |
c->tx = c->x + c->w - c->tw + 2; |
|
27 |
+ |
c->ty = c->y; |
| 28 |
28 |
|
if(c->tags[tsel]) |
| 29 |
|
- |
XMoveResizeWindow(dpy, c->title, c->bx, c->by, c->bw, c->bh); |
|
29 |
+ |
XMoveResizeWindow(dpy, c->title, c->tx, c->ty, c->tw, c->th); |
| 30 |
30 |
|
else |
| 31 |
|
- |
XMoveResizeWindow(dpy, c->title, c->bx + 2 * sw, c->by, c->bw, c->bh); |
|
31 |
+ |
XMoveResizeWindow(dpy, c->title, c->tx + 2 * sw, c->ty, c->tw, c->th); |
| 32 |
32 |
|
|
| 33 |
33 |
|
} |
| 34 |
34 |
|
|
|
| 43 |
43 |
|
void |
| 44 |
44 |
|
ban(Client *c) |
| 45 |
45 |
|
{ |
| 46 |
|
- |
XMoveWindow(dpy, c->win, *c->x + 2 * sw, *c->y); |
| 47 |
|
- |
XMoveWindow(dpy, c->title, c->bx + 2 * sw, c->by); |
|
46 |
+ |
XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); |
|
47 |
+ |
XMoveWindow(dpy, c->title, c->tx + 2 * sw, c->ty); |
| 48 |
48 |
|
} |
| 49 |
49 |
|
|
| 50 |
50 |
|
void |
|
| 128 |
128 |
|
case EastGravity: |
| 129 |
129 |
|
case CenterGravity: |
| 130 |
130 |
|
case WestGravity: |
| 131 |
|
- |
dy = -(*c->h / 2) + c->border; |
|
131 |
+ |
dy = -(c->h / 2) + c->border; |
| 132 |
132 |
|
break; |
| 133 |
133 |
|
case SouthEastGravity: |
| 134 |
134 |
|
case SouthGravity: |
| 135 |
135 |
|
case SouthWestGravity: |
| 136 |
|
- |
dy = -(*c->h); |
|
136 |
+ |
dy = -(c->h); |
| 137 |
137 |
|
break; |
| 138 |
138 |
|
default: |
| 139 |
139 |
|
break; |
|
| 149 |
149 |
|
case NorthGravity: |
| 150 |
150 |
|
case CenterGravity: |
| 151 |
151 |
|
case SouthGravity: |
| 152 |
|
- |
dx = -(*c->w / 2) + c->border; |
|
152 |
+ |
dx = -(c->w / 2) + c->border; |
| 153 |
153 |
|
break; |
| 154 |
154 |
|
case NorthEastGravity: |
| 155 |
155 |
|
case EastGravity: |
| 156 |
156 |
|
case SouthEastGravity: |
| 157 |
|
- |
dx = -(*c->w + c->border); |
|
157 |
+ |
dx = -(c->w + c->border); |
| 158 |
158 |
|
break; |
| 159 |
159 |
|
default: |
| 160 |
160 |
|
break; |
|
| 164 |
164 |
|
dx = -dx; |
| 165 |
165 |
|
dy = -dy; |
| 166 |
166 |
|
} |
| 167 |
|
- |
*c->x += dx; |
| 168 |
|
- |
*c->y += dy; |
|
167 |
+ |
c->x += dx; |
|
168 |
+ |
c->y += dy; |
| 169 |
169 |
|
} |
| 170 |
170 |
|
|
| 171 |
171 |
|
void |
|
| 203 |
203 |
|
|
| 204 |
204 |
|
c = emallocz(sizeof(Client)); |
| 205 |
205 |
|
c->win = w; |
| 206 |
|
- |
c->bx = c->fx = c->tx = wa->x; |
| 207 |
|
- |
c->by = c->fy = c->ty = wa->y; |
| 208 |
|
- |
c->bw = c->fw = c->tw = wa->width; |
| 209 |
|
- |
c->fh = c->th = wa->height; |
| 210 |
|
- |
c->bh = bh; |
| 211 |
|
- |
|
| 212 |
|
- |
diff = sw - c->fw; |
| 213 |
|
- |
c->fx = random() % (diff ? diff : 1); |
| 214 |
|
- |
diff = sh - c->fh - bh; |
| 215 |
|
- |
c->fy = random() % (diff ? diff : 1); |
|
206 |
+ |
c->x = c->tx = wa->x; |
|
207 |
+ |
c->y = c->ty = wa->y; |
|
208 |
+ |
c->w = c->tw = wa->width; |
|
209 |
+ |
c->h = wa->height; |
|
210 |
+ |
c->th = bh; |
| 216 |
211 |
|
|
| 217 |
|
- |
if(c->fy < bh) |
| 218 |
|
- |
c->by = c->fy = c->ty = bh; |
|
212 |
+ |
if(c->y < bh) |
|
213 |
+ |
c->y = c->ty = bh; |
| 219 |
214 |
|
|
| 220 |
215 |
|
c->border = 1; |
| 221 |
216 |
|
c->proto = getproto(c->win); |
|
| 227 |
222 |
|
twa.background_pixmap = ParentRelative; |
| 228 |
223 |
|
twa.event_mask = ExposureMask; |
| 229 |
224 |
|
|
| 230 |
|
- |
c->title = XCreateWindow(dpy, root, c->bx, c->by, c->bw, c->bh, |
|
225 |
+ |
c->title = XCreateWindow(dpy, root, c->tx, c->ty, c->tw, c->th, |
| 231 |
226 |
|
0, DefaultDepth(dpy, screen), CopyFromParent, |
| 232 |
227 |
|
DefaultVisual(dpy, screen), |
| 233 |
228 |
|
CWOverrideRedirect | CWBackPixmap | CWEventMask, &twa); |
|
| 251 |
246 |
|
(c->maxw == c->minw) && (c->maxh == c->minh)); |
| 252 |
247 |
|
|
| 253 |
248 |
|
|
| 254 |
|
- |
setgeom(c); |
| 255 |
249 |
|
settitle(c); |
| 256 |
|
- |
|
| 257 |
250 |
|
arrange(NULL); |
| 258 |
251 |
|
|
| 259 |
252 |
|
/* mapping the window now prevents flicker */ |
|
| 273 |
266 |
|
{ |
| 274 |
267 |
|
if(!sel) |
| 275 |
268 |
|
return; |
| 276 |
|
- |
*sel->x = sx; |
| 277 |
|
- |
*sel->y = sy + bh; |
| 278 |
|
- |
*sel->w = sw - 2 * sel->border; |
| 279 |
|
- |
*sel->h = sh - 2 * sel->border - bh; |
|
269 |
+ |
sel->x = sx; |
|
270 |
+ |
sel->y = sy + bh; |
|
271 |
+ |
sel->w = sw - 2 * sel->border; |
|
272 |
+ |
sel->h = sh - 2 * sel->border - bh; |
| 280 |
273 |
|
higher(sel); |
| 281 |
274 |
|
resize(sel, False, TopLeft); |
| 282 |
275 |
|
} |
|
| 297 |
290 |
|
resize(Client *c, Bool inc, Corner sticky) |
| 298 |
291 |
|
{ |
| 299 |
292 |
|
XConfigureEvent e; |
| 300 |
|
- |
int right = *c->x + *c->w; |
| 301 |
|
- |
int bottom = *c->y + *c->h; |
|
293 |
+ |
int right = c->x + c->w; |
|
294 |
+ |
int bottom = c->y + c->h; |
| 302 |
295 |
|
|
| 303 |
296 |
|
if(inc) { |
| 304 |
297 |
|
if(c->incw) |
| 305 |
|
- |
*c->w -= (*c->w - c->basew) % c->incw; |
|
298 |
+ |
c->w -= (c->w - c->basew) % c->incw; |
| 306 |
299 |
|
if(c->inch) |
| 307 |
|
- |
*c->h -= (*c->h - c->baseh) % c->inch; |
|
300 |
+ |
c->h -= (c->h - c->baseh) % c->inch; |
| 308 |
301 |
|
} |
| 309 |
|
- |
if(*c->x > sw) /* might happen on restart */ |
| 310 |
|
- |
*c->x = sw - *c->w; |
| 311 |
|
- |
if(*c->y > sh) |
| 312 |
|
- |
*c->y = sh - *c->h; |
| 313 |
|
- |
if(c->minw && *c->w < c->minw) |
| 314 |
|
- |
*c->w = c->minw; |
| 315 |
|
- |
if(c->minh && *c->h < c->minh) |
| 316 |
|
- |
*c->h = c->minh; |
| 317 |
|
- |
if(c->maxw && *c->w > c->maxw) |
| 318 |
|
- |
*c->w = c->maxw; |
| 319 |
|
- |
if(c->maxh && *c->h > c->maxh) |
| 320 |
|
- |
*c->h = c->maxh; |
|
302 |
+ |
if(c->x > sw) /* might happen on restart */ |
|
303 |
+ |
c->x = sw - c->w; |
|
304 |
+ |
if(c->y > sh) |
|
305 |
+ |
c->y = sh - c->h; |
|
306 |
+ |
if(c->minw && c->w < c->minw) |
|
307 |
+ |
c->w = c->minw; |
|
308 |
+ |
if(c->minh && c->h < c->minh) |
|
309 |
+ |
c->h = c->minh; |
|
310 |
+ |
if(c->maxw && c->w > c->maxw) |
|
311 |
+ |
c->w = c->maxw; |
|
312 |
+ |
if(c->maxh && c->h > c->maxh) |
|
313 |
+ |
c->h = c->maxh; |
| 321 |
314 |
|
if(sticky == TopRight || sticky == BotRight) |
| 322 |
|
- |
*c->x = right - *c->w; |
|
315 |
+ |
c->x = right - c->w; |
| 323 |
316 |
|
if(sticky == BotLeft || sticky == BotRight) |
| 324 |
|
- |
*c->y = bottom - *c->h; |
|
317 |
+ |
c->y = bottom - c->h; |
| 325 |
318 |
|
|
| 326 |
319 |
|
resizetitle(c); |
| 327 |
320 |
|
XSetWindowBorderWidth(dpy, c->win, 1); |
| 328 |
|
- |
XMoveResizeWindow(dpy, c->win, *c->x, *c->y, *c->w, *c->h); |
|
321 |
+ |
XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); |
| 329 |
322 |
|
|
| 330 |
323 |
|
e.type = ConfigureNotify; |
| 331 |
324 |
|
e.event = c->win; |
| 332 |
325 |
|
e.window = c->win; |
| 333 |
|
- |
e.x = *c->x; |
| 334 |
|
- |
e.y = *c->y; |
| 335 |
|
- |
e.width = *c->w; |
| 336 |
|
- |
e.height = *c->h; |
|
326 |
+ |
e.x = c->x; |
|
327 |
+ |
e.y = c->y; |
|
328 |
+ |
e.width = c->w; |
|
329 |
+ |
e.height = c->h; |
| 337 |
330 |
|
e.border_width = c->border; |
| 338 |
331 |
|
e.above = None; |
| 339 |
332 |
|
e.override_redirect = False; |
| 340 |
333 |
|
XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&e); |
| 341 |
334 |
|
XSync(dpy, False); |
| 342 |
|
- |
} |
| 343 |
|
- |
|
| 344 |
|
- |
void |
| 345 |
|
- |
setgeom(Client *c) |
| 346 |
|
- |
{ |
| 347 |
|
- |
if((arrange == dotile) && !c->isfloat) { |
| 348 |
|
- |
c->x = &c->tx; |
| 349 |
|
- |
c->y = &c->ty; |
| 350 |
|
- |
c->w = &c->tw; |
| 351 |
|
- |
c->h = &c->th; |
| 352 |
|
- |
} |
| 353 |
|
- |
else { |
| 354 |
|
- |
c->x = &c->fx; |
| 355 |
|
- |
c->y = &c->fy; |
| 356 |
|
- |
c->w = &c->fw; |
| 357 |
|
- |
c->h = &c->fh; |
| 358 |
|
- |
} |
| 359 |
335 |
|
} |
| 360 |
336 |
|
|
| 361 |
337 |
|
void |