summaryrefslogtreecommitdiffhomepage
path: root/patch/xkb.c
diff options
context:
space:
mode:
authorbakkeby <[email protected]>2021-04-07 15:35:56 +0200
committerbakkeby <[email protected]>2021-04-07 15:35:56 +0200
commitac737f9dfc427e0713176fc35373cd9410320f19 (patch)
tree8d2c55e04e21cc044dbf435e573884302e09cc07 /patch/xkb.c
parent0c88a49e27fd0888c81aea5dd3eef1c537164a6a (diff)
downloaddwm-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.c67
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;
+}