added gravity stuff
This commit is contained in:
		
							parent
							
								
									6db5ffb6c9
								
							
						
					
					
						commit
						2e836ecce1
					
				
							
								
								
									
										72
									
								
								client.c
								
								
								
								
							
							
						
						
									
										72
									
								
								client.c
								
								
								
								
							| 
						 | 
					@ -18,9 +18,10 @@ max(void *aux)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	stack->x = sx;
 | 
						stack->x = sx;
 | 
				
			||||||
	stack->y = bh;
 | 
						stack->y = bh;
 | 
				
			||||||
	stack->w = sw - 2;
 | 
						stack->w = sw - 2 * stack->border;
 | 
				
			||||||
	stack->h = sh - bh - 2;
 | 
						stack->h = sh - bh - 2 * stack->border;
 | 
				
			||||||
	resize(stack);
 | 
						resize(stack);
 | 
				
			||||||
 | 
						discard_events(EnterWindowMask);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
| 
						 | 
					@ -43,8 +44,8 @@ arrange(void *aux)
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		cols = rows;
 | 
							cols = rows;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	gw = (sw - 1)  / cols;
 | 
						gw = (sw - 2 * c->border)  / cols;
 | 
				
			||||||
	gh = (sh - bh - 1) / rows;
 | 
						gh = (sh - bh - 2 * c->border) / rows;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for(i = j = 0, c = clients; c; c = c->next) {
 | 
						for(i = j = 0, c = clients; c; c = c->next) {
 | 
				
			||||||
		c->x = i * gw;
 | 
							c->x = i * gw;
 | 
				
			||||||
| 
						 | 
					@ -57,6 +58,7 @@ arrange(void *aux)
 | 
				
			||||||
			i = 0;
 | 
								i = 0;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						discard_events(EnterWindowMask);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
| 
						 | 
					@ -161,6 +163,10 @@ update_size(Client *c)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		c->minw = c->minh = 0;
 | 
							c->minw = c->minh = 0;
 | 
				
			||||||
 | 
						if(c->flags & PWinGravity)
 | 
				
			||||||
 | 
							c->grav = size.win_gravity;
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							c->grav = NorthWestGravity;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
| 
						 | 
					@ -213,6 +219,7 @@ manage(Window w, XWindowAttributes *wa)
 | 
				
			||||||
	c->tw = c->w = wa->width;
 | 
						c->tw = c->w = wa->width;
 | 
				
			||||||
	c->h = wa->height;
 | 
						c->h = wa->height;
 | 
				
			||||||
	c->th = bh;
 | 
						c->th = bh;
 | 
				
			||||||
 | 
						c->border = 1;
 | 
				
			||||||
	update_size(c);
 | 
						update_size(c);
 | 
				
			||||||
	XSetWindowBorderWidth(dpy, c->win, 1);
 | 
						XSetWindowBorderWidth(dpy, c->win, 1);
 | 
				
			||||||
	XSetWindowBorder(dpy, c->win, brush.border);
 | 
						XSetWindowBorder(dpy, c->win, brush.border);
 | 
				
			||||||
| 
						 | 
					@ -246,6 +253,61 @@ manage(Window w, XWindowAttributes *wa)
 | 
				
			||||||
	focus(c);
 | 
						focus(c);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					gravitate(Client *c, Bool invert)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int dx = 0, dy = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						switch(c->grav) {
 | 
				
			||||||
 | 
						case StaticGravity:
 | 
				
			||||||
 | 
						case NorthWestGravity:
 | 
				
			||||||
 | 
						case NorthGravity:
 | 
				
			||||||
 | 
						case NorthEastGravity:
 | 
				
			||||||
 | 
							dy = c->border;
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						case EastGravity:
 | 
				
			||||||
 | 
						case CenterGravity:
 | 
				
			||||||
 | 
						case WestGravity:
 | 
				
			||||||
 | 
							dy = -(c->h / 2) + c->border;
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						case SouthEastGravity:
 | 
				
			||||||
 | 
						case SouthGravity:
 | 
				
			||||||
 | 
						case SouthWestGravity:
 | 
				
			||||||
 | 
							dy = -c->h;
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						default:
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						switch (c->grav) {
 | 
				
			||||||
 | 
						case StaticGravity:
 | 
				
			||||||
 | 
						case NorthWestGravity:
 | 
				
			||||||
 | 
						case WestGravity:
 | 
				
			||||||
 | 
						case SouthWestGravity:
 | 
				
			||||||
 | 
							dx = c->border;
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						case NorthGravity:
 | 
				
			||||||
 | 
						case CenterGravity:
 | 
				
			||||||
 | 
						case SouthGravity:
 | 
				
			||||||
 | 
							dx = -(c->w / 2) + c->border;
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						case NorthEastGravity:
 | 
				
			||||||
 | 
						case EastGravity:
 | 
				
			||||||
 | 
						case SouthEastGravity:
 | 
				
			||||||
 | 
							dx = -(c->w + c->border);
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						default:
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(invert) {
 | 
				
			||||||
 | 
							dx = -dx;
 | 
				
			||||||
 | 
							dy = -dy;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						c->x += dx;
 | 
				
			||||||
 | 
						c->y += dy;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
resize(Client *c)
 | 
					resize(Client *c)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -260,7 +322,7 @@ resize(Client *c)
 | 
				
			||||||
	e.y = c->y;
 | 
						e.y = c->y;
 | 
				
			||||||
	e.width = c->w;
 | 
						e.width = c->w;
 | 
				
			||||||
	e.height = c->h;
 | 
						e.height = c->h;
 | 
				
			||||||
	e.border_width = 0;
 | 
						e.border_width = c->border;
 | 
				
			||||||
	e.above = None;
 | 
						e.above = None;
 | 
				
			||||||
	e.override_redirect = False;
 | 
						e.override_redirect = False;
 | 
				
			||||||
	XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&e);
 | 
						XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&e);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										4
									
								
								event.c
								
								
								
								
							
							
						
						
									
										4
									
								
								event.c
								
								
								
								
							| 
						 | 
					@ -77,6 +77,7 @@ configurerequest(XEvent *e)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ev->value_mask &= ~CWSibling;
 | 
						ev->value_mask &= ~CWSibling;
 | 
				
			||||||
	if((c = getclient(ev->window))) {
 | 
						if((c = getclient(ev->window))) {
 | 
				
			||||||
 | 
							gravitate(c, True);
 | 
				
			||||||
		if(ev->value_mask & CWX)
 | 
							if(ev->value_mask & CWX)
 | 
				
			||||||
			c->x = ev->x;
 | 
								c->x = ev->x;
 | 
				
			||||||
		if(ev->value_mask & CWY)
 | 
							if(ev->value_mask & CWY)
 | 
				
			||||||
| 
						 | 
					@ -85,6 +86,9 @@ configurerequest(XEvent *e)
 | 
				
			||||||
			c->w = ev->width;
 | 
								c->w = ev->width;
 | 
				
			||||||
		if(ev->value_mask & CWHeight)
 | 
							if(ev->value_mask & CWHeight)
 | 
				
			||||||
			c->h = ev->height;
 | 
								c->h = ev->height;
 | 
				
			||||||
 | 
							if(ev->value_mask & CWBorderWidth)
 | 
				
			||||||
 | 
								c->border = ev->border_width;
 | 
				
			||||||
 | 
							gravitate(c, False);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wc.x = ev->x;
 | 
						wc.x = ev->x;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								kb.c
								
								
								
								
							
							
						
						
									
										2
									
								
								kb.c
								
								
								
								
							| 
						 | 
					@ -8,7 +8,7 @@
 | 
				
			||||||
#include <X11/keysym.h>
 | 
					#include <X11/keysym.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const char *term[] = { 
 | 
					static const char *term[] = { 
 | 
				
			||||||
	"xterm", "-bg", "black", "-fg", "white", "-fn",
 | 
						"aterm", "-tr", "+sb", "-bg", "black", "-fg", "white", "-fn",
 | 
				
			||||||
	"-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*", 0 
 | 
						"-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*", 0 
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										5
									
								
								wm.h
								
								
								
								
							
							
						
						
									
										5
									
								
								wm.h
								
								
								
								
							| 
						 | 
					@ -27,6 +27,8 @@ struct Client {
 | 
				
			||||||
	int x, y, w, h;
 | 
						int x, y, w, h;
 | 
				
			||||||
	int tx, ty, tw, th;
 | 
						int tx, ty, tw, th;
 | 
				
			||||||
	int basew, baseh, incw, inch, maxw, maxh, minw, minh;
 | 
						int basew, baseh, incw, inch, maxw, maxh, minw, minh;
 | 
				
			||||||
 | 
						int grav;
 | 
				
			||||||
 | 
						unsigned int border;
 | 
				
			||||||
	long flags; 
 | 
						long flags; 
 | 
				
			||||||
	Window win;
 | 
						Window win;
 | 
				
			||||||
	Window trans;
 | 
						Window trans;
 | 
				
			||||||
| 
						 | 
					@ -73,7 +75,8 @@ extern void lower(Client *c);
 | 
				
			||||||
extern void kill(void *aux);
 | 
					extern void kill(void *aux);
 | 
				
			||||||
extern void sel(void *aux);
 | 
					extern void sel(void *aux);
 | 
				
			||||||
extern void max(void *aux);
 | 
					extern void max(void *aux);
 | 
				
			||||||
extern void arrange();
 | 
					extern void arrange(void *aux);
 | 
				
			||||||
 | 
					extern void gravitate(Client *c, Bool invert);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* event.c */
 | 
					/* event.c */
 | 
				
			||||||
extern void discard_events(long even_mask);
 | 
					extern void discard_events(long even_mask);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue