diff --color -up /tmp/dwm-6.2/dwm.c dwm-6.2/dwm.c --- /tmp/dwm-6.2/dwm.c 2019-02-02 14:55:28.000000000 +0200 +++ dwm-6.2/dwm.c 2020-12-01 12:20:55.584639058 +0200 @@ -36,6 +36,7 @@ #include #include #include +#include #ifdef XINERAMA #include #endif /* XINERAMA */ @@ -97,6 +98,7 @@ struct Client { Client *snext; Monitor *mon; Window win; + unsigned char kbdgrp; }; typedef struct { @@ -792,6 +794,7 @@ focus(Client *c) selmon = c->mon; if (c->isurgent) seturgent(c, 0); + XkbLockGroup(dpy, XkbUseCoreKbd, c->kbdgrp); detachstack(c); attachstack(c); grabbuttons(c, 1); @@ -1020,6 +1023,7 @@ manage(Window w, XWindowAttributes *wa) Client *c, *t = NULL; Window trans = None; XWindowChanges wc; + XkbStateRec kbd_state; c = ecalloc(1, sizeof(Client)); c->win = w; @@ -1071,6 +1075,8 @@ manage(Window w, XWindowAttributes *wa) if (c->mon == selmon) unfocus(selmon->sel, 0); c->mon->sel = c; + XkbGetState(dpy, XkbUseCoreKbd, &kbd_state); + c->kbdgrp = kbd_state.group; arrange(c->mon); XMapWindow(dpy, c->win); focus(NULL); @@ -1749,6 +1755,7 @@ toggleview(const Arg *arg) void unfocus(Client *c, int setfocus) { + XkbStateRec kbd_state; if (!c) return; grabbuttons(c, 0); @@ -1757,6 +1764,8 @@ unfocus(Client *c, int setfocus) XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); XDeleteProperty(dpy, root, netatom[NetActiveWindow]); } + XkbGetState(dpy, XkbUseCoreKbd, &kbd_state); + c->kbdgrp = kbd_state.group; } void