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;
|
|
}
|
|
|