added gravity stuff
2e836ecc
4 file(s) · +76 −7
| 18 | 18 | return; |
|
| 19 | 19 | stack->x = sx; |
|
| 20 | 20 | stack->y = bh; |
|
| 21 | - | stack->w = sw - 2; |
|
| 22 | - | stack->h = sh - bh - 2; |
|
| 21 | + | stack->w = sw - 2 * stack->border; |
|
| 22 | + | stack->h = sh - bh - 2 * stack->border; |
|
| 23 | 23 | resize(stack); |
|
| 24 | + | discard_events(EnterWindowMask); |
|
| 24 | 25 | } |
|
| 25 | 26 | ||
| 26 | 27 | void |
|
| 43 | 44 | else |
|
| 44 | 45 | cols = rows; |
|
| 45 | 46 | ||
| 46 | - | gw = (sw - 1) / cols; |
|
| 47 | - | gh = (sh - bh - 1) / rows; |
|
| 47 | + | gw = (sw - 2 * c->border) / cols; |
|
| 48 | + | gh = (sh - bh - 2 * c->border) / rows; |
|
| 48 | 49 | ||
| 49 | 50 | for(i = j = 0, c = clients; c; c = c->next) { |
|
| 50 | 51 | c->x = i * gw; |
|
| 57 | 58 | i = 0; |
|
| 58 | 59 | } |
|
| 59 | 60 | } |
|
| 61 | + | discard_events(EnterWindowMask); |
|
| 60 | 62 | } |
|
| 61 | 63 | ||
| 62 | 64 | void |
|
| 161 | 163 | } |
|
| 162 | 164 | else |
|
| 163 | 165 | c->minw = c->minh = 0; |
|
| 166 | + | if(c->flags & PWinGravity) |
|
| 167 | + | c->grav = size.win_gravity; |
|
| 168 | + | else |
|
| 169 | + | c->grav = NorthWestGravity; |
|
| 164 | 170 | } |
|
| 165 | 171 | ||
| 166 | 172 | void |
|
| 213 | 219 | c->tw = c->w = wa->width; |
|
| 214 | 220 | c->h = wa->height; |
|
| 215 | 221 | c->th = bh; |
|
| 222 | + | c->border = 1; |
|
| 216 | 223 | update_size(c); |
|
| 217 | 224 | XSetWindowBorderWidth(dpy, c->win, 1); |
|
| 218 | 225 | XSetWindowBorder(dpy, c->win, brush.border); |
|
| 247 | 254 | } |
|
| 248 | 255 | ||
| 249 | 256 | void |
|
| 257 | + | gravitate(Client *c, Bool invert) |
|
| 258 | + | { |
|
| 259 | + | int dx = 0, dy = 0; |
|
| 260 | + | ||
| 261 | + | switch(c->grav) { |
|
| 262 | + | case StaticGravity: |
|
| 263 | + | case NorthWestGravity: |
|
| 264 | + | case NorthGravity: |
|
| 265 | + | case NorthEastGravity: |
|
| 266 | + | dy = c->border; |
|
| 267 | + | break; |
|
| 268 | + | case EastGravity: |
|
| 269 | + | case CenterGravity: |
|
| 270 | + | case WestGravity: |
|
| 271 | + | dy = -(c->h / 2) + c->border; |
|
| 272 | + | break; |
|
| 273 | + | case SouthEastGravity: |
|
| 274 | + | case SouthGravity: |
|
| 275 | + | case SouthWestGravity: |
|
| 276 | + | dy = -c->h; |
|
| 277 | + | break; |
|
| 278 | + | default: |
|
| 279 | + | break; |
|
| 280 | + | } |
|
| 281 | + | ||
| 282 | + | switch (c->grav) { |
|
| 283 | + | case StaticGravity: |
|
| 284 | + | case NorthWestGravity: |
|
| 285 | + | case WestGravity: |
|
| 286 | + | case SouthWestGravity: |
|
| 287 | + | dx = c->border; |
|
| 288 | + | break; |
|
| 289 | + | case NorthGravity: |
|
| 290 | + | case CenterGravity: |
|
| 291 | + | case SouthGravity: |
|
| 292 | + | dx = -(c->w / 2) + c->border; |
|
| 293 | + | break; |
|
| 294 | + | case NorthEastGravity: |
|
| 295 | + | case EastGravity: |
|
| 296 | + | case SouthEastGravity: |
|
| 297 | + | dx = -(c->w + c->border); |
|
| 298 | + | break; |
|
| 299 | + | default: |
|
| 300 | + | break; |
|
| 301 | + | } |
|
| 302 | + | ||
| 303 | + | if(invert) { |
|
| 304 | + | dx = -dx; |
|
| 305 | + | dy = -dy; |
|
| 306 | + | } |
|
| 307 | + | c->x += dx; |
|
| 308 | + | c->y += dy; |
|
| 309 | + | } |
|
| 310 | + | ||
| 311 | + | void |
|
| 250 | 312 | resize(Client *c) |
|
| 251 | 313 | { |
|
| 252 | 314 | XConfigureEvent e; |
|
| 260 | 322 | e.y = c->y; |
|
| 261 | 323 | e.width = c->w; |
|
| 262 | 324 | e.height = c->h; |
|
| 263 | - | e.border_width = 0; |
|
| 325 | + | e.border_width = c->border; |
|
| 264 | 326 | e.above = None; |
|
| 265 | 327 | e.override_redirect = False; |
|
| 266 | 328 | XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&e); |
|
| 77 | 77 | ||
| 78 | 78 | ev->value_mask &= ~CWSibling; |
|
| 79 | 79 | if((c = getclient(ev->window))) { |
|
| 80 | + | gravitate(c, True); |
|
| 80 | 81 | if(ev->value_mask & CWX) |
|
| 81 | 82 | c->x = ev->x; |
|
| 82 | 83 | if(ev->value_mask & CWY) |
|
| 85 | 86 | c->w = ev->width; |
|
| 86 | 87 | if(ev->value_mask & CWHeight) |
|
| 87 | 88 | c->h = ev->height; |
|
| 89 | + | if(ev->value_mask & CWBorderWidth) |
|
| 90 | + | c->border = ev->border_width; |
|
| 91 | + | gravitate(c, False); |
|
| 88 | 92 | } |
|
| 89 | 93 | ||
| 90 | 94 | wc.x = ev->x; |
|
| 8 | 8 | #include <X11/keysym.h> |
|
| 9 | 9 | ||
| 10 | 10 | static const char *term[] = { |
|
| 11 | - | "xterm", "-bg", "black", "-fg", "white", "-fn", |
|
| 11 | + | "aterm", "-tr", "+sb", "-bg", "black", "-fg", "white", "-fn", |
|
| 12 | 12 | "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*", 0 |
|
| 13 | 13 | }; |
|
| 14 | 14 |
| 27 | 27 | int x, y, w, h; |
|
| 28 | 28 | int tx, ty, tw, th; |
|
| 29 | 29 | int basew, baseh, incw, inch, maxw, maxh, minw, minh; |
|
| 30 | + | int grav; |
|
| 31 | + | unsigned int border; |
|
| 30 | 32 | long flags; |
|
| 31 | 33 | Window win; |
|
| 32 | 34 | Window trans; |
|
| 73 | 75 | extern void kill(void *aux); |
|
| 74 | 76 | extern void sel(void *aux); |
|
| 75 | 77 | extern void max(void *aux); |
|
| 76 | - | extern void arrange(); |
|
| 78 | + | extern void arrange(void *aux); |
|
| 79 | + | extern void gravitate(Client *c, Bool invert); |
|
| 77 | 80 | ||
| 78 | 81 | /* event.c */ |
|
| 79 | 82 | extern void discard_events(long even_mask); |
|