aewl
changeset 29:8ad86d0a6a53
added gravity stuff
author | Anselm R. Garbe <garbeam@wmii.de> |
---|---|
date | Wed, 12 Jul 2006 17:17:15 +0200 |
parents | 3dceb132082d |
children | 2e0fb4130bfb |
files | client.c event.c kb.c wm.h |
diffstat | 4 files changed, 76 insertions(+), 7 deletions(-) [+] |
line diff
1.1 --- a/client.c Wed Jul 12 16:40:37 2006 +0200 1.2 +++ b/client.c Wed Jul 12 17:17:15 2006 +0200 1.3 @@ -18,9 +18,10 @@ 1.4 return; 1.5 stack->x = sx; 1.6 stack->y = bh; 1.7 - stack->w = sw - 2; 1.8 - stack->h = sh - bh - 2; 1.9 + stack->w = sw - 2 * stack->border; 1.10 + stack->h = sh - bh - 2 * stack->border; 1.11 resize(stack); 1.12 + discard_events(EnterWindowMask); 1.13 } 1.14 1.15 void 1.16 @@ -43,8 +44,8 @@ 1.17 else 1.18 cols = rows; 1.19 1.20 - gw = (sw - 1) / cols; 1.21 - gh = (sh - bh - 1) / rows; 1.22 + gw = (sw - 2 * c->border) / cols; 1.23 + gh = (sh - bh - 2 * c->border) / rows; 1.24 1.25 for(i = j = 0, c = clients; c; c = c->next) { 1.26 c->x = i * gw; 1.27 @@ -57,6 +58,7 @@ 1.28 i = 0; 1.29 } 1.30 } 1.31 + discard_events(EnterWindowMask); 1.32 } 1.33 1.34 void 1.35 @@ -161,6 +163,10 @@ 1.36 } 1.37 else 1.38 c->minw = c->minh = 0; 1.39 + if(c->flags & PWinGravity) 1.40 + c->grav = size.win_gravity; 1.41 + else 1.42 + c->grav = NorthWestGravity; 1.43 } 1.44 1.45 void 1.46 @@ -213,6 +219,7 @@ 1.47 c->tw = c->w = wa->width; 1.48 c->h = wa->height; 1.49 c->th = bh; 1.50 + c->border = 1; 1.51 update_size(c); 1.52 XSetWindowBorderWidth(dpy, c->win, 1); 1.53 XSetWindowBorder(dpy, c->win, brush.border); 1.54 @@ -247,6 +254,61 @@ 1.55 } 1.56 1.57 void 1.58 +gravitate(Client *c, Bool invert) 1.59 +{ 1.60 + int dx = 0, dy = 0; 1.61 + 1.62 + switch(c->grav) { 1.63 + case StaticGravity: 1.64 + case NorthWestGravity: 1.65 + case NorthGravity: 1.66 + case NorthEastGravity: 1.67 + dy = c->border; 1.68 + break; 1.69 + case EastGravity: 1.70 + case CenterGravity: 1.71 + case WestGravity: 1.72 + dy = -(c->h / 2) + c->border; 1.73 + break; 1.74 + case SouthEastGravity: 1.75 + case SouthGravity: 1.76 + case SouthWestGravity: 1.77 + dy = -c->h; 1.78 + break; 1.79 + default: 1.80 + break; 1.81 + } 1.82 + 1.83 + switch (c->grav) { 1.84 + case StaticGravity: 1.85 + case NorthWestGravity: 1.86 + case WestGravity: 1.87 + case SouthWestGravity: 1.88 + dx = c->border; 1.89 + break; 1.90 + case NorthGravity: 1.91 + case CenterGravity: 1.92 + case SouthGravity: 1.93 + dx = -(c->w / 2) + c->border; 1.94 + break; 1.95 + case NorthEastGravity: 1.96 + case EastGravity: 1.97 + case SouthEastGravity: 1.98 + dx = -(c->w + c->border); 1.99 + break; 1.100 + default: 1.101 + break; 1.102 + } 1.103 + 1.104 + if(invert) { 1.105 + dx = -dx; 1.106 + dy = -dy; 1.107 + } 1.108 + c->x += dx; 1.109 + c->y += dy; 1.110 +} 1.111 + 1.112 +void 1.113 resize(Client *c) 1.114 { 1.115 XConfigureEvent e; 1.116 @@ -260,7 +322,7 @@ 1.117 e.y = c->y; 1.118 e.width = c->w; 1.119 e.height = c->h; 1.120 - e.border_width = 0; 1.121 + e.border_width = c->border; 1.122 e.above = None; 1.123 e.override_redirect = False; 1.124 XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&e);
2.1 --- a/event.c Wed Jul 12 16:40:37 2006 +0200 2.2 +++ b/event.c Wed Jul 12 17:17:15 2006 +0200 2.3 @@ -77,6 +77,7 @@ 2.4 2.5 ev->value_mask &= ~CWSibling; 2.6 if((c = getclient(ev->window))) { 2.7 + gravitate(c, True); 2.8 if(ev->value_mask & CWX) 2.9 c->x = ev->x; 2.10 if(ev->value_mask & CWY) 2.11 @@ -85,6 +86,9 @@ 2.12 c->w = ev->width; 2.13 if(ev->value_mask & CWHeight) 2.14 c->h = ev->height; 2.15 + if(ev->value_mask & CWBorderWidth) 2.16 + c->border = ev->border_width; 2.17 + gravitate(c, False); 2.18 } 2.19 2.20 wc.x = ev->x;
3.1 --- a/kb.c Wed Jul 12 16:40:37 2006 +0200 3.2 +++ b/kb.c Wed Jul 12 17:17:15 2006 +0200 3.3 @@ -8,7 +8,7 @@ 3.4 #include <X11/keysym.h> 3.5 3.6 static const char *term[] = { 3.7 - "xterm", "-bg", "black", "-fg", "white", "-fn", 3.8 + "aterm", "-tr", "+sb", "-bg", "black", "-fg", "white", "-fn", 3.9 "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*", 0 3.10 }; 3.11
4.1 --- a/wm.h Wed Jul 12 16:40:37 2006 +0200 4.2 +++ b/wm.h Wed Jul 12 17:17:15 2006 +0200 4.3 @@ -27,6 +27,8 @@ 4.4 int x, y, w, h; 4.5 int tx, ty, tw, th; 4.6 int basew, baseh, incw, inch, maxw, maxh, minw, minh; 4.7 + int grav; 4.8 + unsigned int border; 4.9 long flags; 4.10 Window win; 4.11 Window trans; 4.12 @@ -73,7 +75,8 @@ 4.13 extern void kill(void *aux); 4.14 extern void sel(void *aux); 4.15 extern void max(void *aux); 4.16 -extern void arrange(); 4.17 +extern void arrange(void *aux); 4.18 +extern void gravitate(Client *c, Bool invert); 4.19 4.20 /* event.c */ 4.21 extern void discard_events(long even_mask);