diff -r 406003e3a01f dwm.c --- a/dwm.c Mon Sep 27 07:53:44 2010 +0000 +++ b/dwm.c Tue Oct 12 20:38:27 2010 +0300 @@ -36,6 +36,7 @@ #include #include #include +#include #ifdef XINERAMA #include #endif /* XINERAMA */ @@ -93,6 +94,7 @@ Client *snext; Monitor *mon; Window win; + unsigned char kbdgrp; }; typedef struct { @@ -821,6 +823,7 @@ selmon = c->mon; if(c->isurgent) clearurgent(c); + XkbLockGroup (dpy, XkbUseCoreKbd, c->kbdgrp); detachstack(c); attachstack(c); grabbuttons(c, True); @@ -857,7 +860,7 @@ void focusstack(const Arg *arg) { Client *c = NULL, *i; - + if(!selmon->sel) return; if(arg->i > 0) { @@ -1092,6 +1095,7 @@ Client *c, *t = NULL; Window trans = None; XWindowChanges wc; + XkbStateRec kbd_state; if(!(c = malloc(sizeof(Client)))) die("fatal: could not malloc() %u bytes\n", sizeof(Client)); @@ -1146,6 +1150,8 @@ XMapWindow(dpy, c->win); setclientstate(c, NormalState); arrange(c->mon); + XkbGetState (dpy, XkbUseCoreKbd, &kbd_state); + c->kbdgrp = kbd_state.group; } void @@ -1700,12 +1706,16 @@ void unfocus(Client *c, Bool setfocus) { + XkbStateRec kbd_state; + if(!c) return; grabbuttons(c, False); XSetWindowBorder(dpy, c->win, dc.norm[ColBorder]); if(setfocus) XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); + XkbGetState (dpy, XkbUseCoreKbd, &kbd_state); + c->kbdgrp = kbd_state.group; } void