void
barhover(XEvent *e, Bar *bar)
{
	const BarRule *br;
	Monitor *m = bar->mon;
	XMotionEvent *ev = &e->xmotion;
	BarArg barg = { 0, 0, 0, 0 };
	int r;

	for (r = 0; r < LENGTH(barrules); r++) {
		br = &barrules[r];
		if (br->bar != bar->idx || (br->monitor == 'A' && m != selmon) || br->hoverfunc == NULL)
			continue;
		if (br->monitor != 'A' && br->monitor != -1 && br->monitor != bar->mon->num)
			continue;
		if (bar->x[r] > ev->x || ev->x > bar->x[r] + bar->w[r])
			continue;

		barg.x = ev->x - bar->x[r];
		barg.y = ev->y - bar->borderpx;
		barg.w = bar->w[r];
		barg.h = bar->bh - 2 * bar->borderpx;

		br->hoverfunc(bar, &barg, ev);
		break;
	}
}

Bar *
wintobar(Window win)
{
	Monitor *m;
	Bar *bar;
	for (m = mons; m; m = m->next)
		for (bar = m->bar; bar; bar = bar->next)
			if (bar->win == win)
				return bar;
	return NULL;
}