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