39 lines
		
	
	
		
			671 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			671 B
		
	
	
	
		
			C
		
	
	
	
	
	
| void
 | |
| warp(const Client *c)
 | |
| {
 | |
| 	Monitor *m;
 | |
| 	Bar *bar;
 | |
| 	int x, y;
 | |
| 
 | |
| 	if (ignore_warp)
 | |
| 		return;
 | |
| 
 | |
| 	if (!c) {
 | |
| 		XWarpPointer(dpy, None, root, 0, 0, 0, 0, selmon->wx + selmon->ww / 2, selmon->wy + selmon->wh / 2);
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	if (!getrootptr(&x, &y))
 | |
| 		return;
 | |
| 
 | |
| 	if (!force_warp &&
 | |
| 		(x > c->x - c->bw &&
 | |
| 		 y > c->y - c->bw &&
 | |
| 		 x < c->x + c->w + c->bw*2 &&
 | |
| 		 y < c->y + c->h + c->bw*2))
 | |
| 		return;
 | |
| 
 | |
| 	force_warp = 0;
 | |
| 
 | |
| 	for (m = mons; m; m = m->next)
 | |
| 		for (bar = m->bar; bar; bar = bar->next)
 | |
| 			if (x > bar->bx &&
 | |
| 				x < bar->bx + bar->bw &&
 | |
| 				y > bar->by &&
 | |
| 				y < bar->by + bar->bh)
 | |
| 				return;
 | |
| 
 | |
| 	XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w / 2, c->h / 2);
 | |
| }
 | |
| 
 |