summaryrefslogtreecommitdiff
path: root/patch/xkb.c
diff options
context:
space:
mode:
authorBear <bear@bengtsson.win>2021-12-27 09:29:58 +0000
committerBear <bear@bengtsson.win>2021-12-27 09:29:58 +0000
commit69262b01ced79c2d776fab9b889926d1816a1e7a (patch)
treef304cd6fa8734e83a7772d07dc9b484781565155 /patch/xkb.c
Added DWM
Diffstat (limited to 'patch/xkb.c')
-rw-r--r--patch/xkb.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/patch/xkb.c b/patch/xkb.c
new file mode 100644
index 0000000..d779733
--- /dev/null
+++ b/patch/xkb.c
@@ -0,0 +1,68 @@
+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;
+}
+