Adding xkb patch as per request #111
parent
0c88a49e27
commit
ac737f9dfc
@ -0,0 +1,67 @@
|
|||||||
|
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;
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
static XkbInfo *createxkb(Window w);
|
||||||
|
static XkbInfo *findxkb(Window w);
|
||||||
|
static void xkbeventnotify(XEvent *e);
|
||||||
|
|
||||||
|
static int width_xkb(Bar *bar, BarArg *a);
|
||||||
|
static int draw_xkb(Bar *bar, BarArg *a);
|
||||||
|
static int click_xkb(Bar *bar, Arg *arg, BarArg *a);
|
Loading…
Reference in New Issue