diff options
| author | bakkeby <[email protected]> | 2021-04-07 15:35:56 +0200 |
|---|---|---|
| committer | bakkeby <[email protected]> | 2021-04-07 15:35:56 +0200 |
| commit | ac737f9dfc427e0713176fc35373cd9410320f19 (patch) | |
| tree | 8d2c55e04e21cc044dbf435e573884302e09cc07 /patch/xkb.c | |
| parent | 0c88a49e27fd0888c81aea5dd3eef1c537164a6a (diff) | |
| download | dwm-flexipatch-ac737f9dfc427e0713176fc35373cd9410320f19.tar.gz dwm-flexipatch-ac737f9dfc427e0713176fc35373cd9410320f19.zip | |
Adding xkb patch as per request #111
Diffstat (limited to 'patch/xkb.c')
| -rw-r--r-- | patch/xkb.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/patch/xkb.c b/patch/xkb.c new file mode 100644 index 0000000..0ce2cec --- /dev/null +++ b/patch/xkb.c @@ -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; +} |
