69 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| static XkbInfo xkbGlobal;
 | |
| static XkbInfo *xkbSaved = NULL;
 | |
| 
 | |
| static XkbInfo *
 | |
| createxkb(Window w)
 | |
| {
 | |
| 	XkbInfo *xkb;
 | |
| 
 | |
| 	xkb = malloc(sizeof *xkb);
 | |
| 	if (xkb == NULL)
 | |
| 		die("fatal: could not malloc() %u bytes\n", sizeof *xkb);
 | |
| 	xkb->group = xkbGlobal.group;
 | |
| 	xkb->w = w;
 | |
| 	xkb->next = xkbSaved;
 | |
| 	if (xkbSaved != NULL)
 | |
| 		xkbSaved->prev = xkb;
 | |
| 	xkb->prev = NULL;
 | |
| 	xkbSaved = xkb;
 | |
| 
 | |
| 	return xkb;
 | |
| }
 | |
| 
 | |
| XkbInfo *
 | |
| findxkb(Window w)
 | |
| {
 | |
| 	XkbInfo *xkb;
 | |
| 	for (xkb = xkbSaved; xkb != NULL; xkb = xkb->next)
 | |
| 		if (xkb->w == w)
 | |
| 			return xkb;
 | |
| 	return NULL;
 | |
| }
 | |
| 
 | |
| void
 | |
| xkbeventnotify(XEvent *e)
 | |
| {
 | |
| 	XkbEvent *ev;
 | |
| 
 | |
| 	ev = (XkbEvent *) e;
 | |
| 	switch (ev->any.xkb_type) {
 | |
| 	case XkbStateNotify:
 | |
| 		xkbGlobal.group = ev->state.locked_group;
 | |
| 		if (selmon != NULL && selmon->sel != NULL)
 | |
| 			selmon->sel->xkb->group = xkbGlobal.group;
 | |
| 		drawbars();
 | |
| 		break;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /* xkb bar module */
 | |
| int
 | |
| width_xkb(Bar *bar, BarArg *a)
 | |
| {
 | |
| 	return TEXTW(xkb_layouts[xkbGlobal.group]);
 | |
| }
 | |
| 
 | |
| int
 | |
| draw_xkb(Bar *bar, BarArg *a)
 | |
| {
 | |
| 	drw_text(drw, a->x, a->y, a->w, a->h, lrpad / 2, xkb_layouts[xkbGlobal.group], 0, False);
 | |
| 	return 1;
 | |
| }
 | |
| 
 | |
| int
 | |
| click_xkb(Bar *bar, Arg *arg, BarArg *a)
 | |
| {
 | |
| 	return ClkXKB;
 | |
| }
 | |
| 
 |