Hello, this is a little patch for dwm 5.8.2. Patch adds to dwm functionality of keyboard layout manager: for every open window now stored current layout. If you change the focused window, the current keyboard layout also switched.
And sorry for my english :) =-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=- --- dwm.c.orig 2011-01-09 20:06:56.000000000 +0300 +++ dwm.c 2011-03-26 23:25:58.626602821 +0300 @@ -39,6 +39,7 @@ #ifdef XINERAMA #include <X11/extensions/Xinerama.h> #endif /* XINERAMA */ +#include <X11/XKBlib.h> /* macros */ #define BUTTONMASK (ButtonPressMask|ButtonReleaseMask) @@ -93,6 +94,7 @@ Client *snext; Monitor *mon; Window win; + int XkbGroup; }; typedef struct { @@ -800,6 +802,7 @@ unfocus(selmon->sel, True); selmon = m; } + unfocus(selmon->sel, True); if((c = wintoclient(ev->window))) focus(c); else @@ -832,6 +835,7 @@ grabbuttons(c, True); XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]); XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); + XkbLockGroup(dpy, XkbUseCoreKbd, c->XkbGroup); } else XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); @@ -1103,6 +1107,7 @@ die("fatal: could not malloc() %u bytes\n", sizeof (Client)); *c = cz; c->win = w; + c->XkbGroup = 0; updatetitle(c); if(XGetTransientForHint(dpy, w, &trans)) t = wintoclient(trans); @@ -1708,12 +1713,17 @@ void unfocus(Client *c, Bool setfocus) { + XkbStateRec state; + if(!c) return; grabbuttons(c, False); XSetWindowBorder(dpy, c->win, dc.norm[ColBorder]); if(setfocus) XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); + + XkbGetState(dpy, XkbUseCoreKbd, &state); + c -> XkbGroup = state.group; } void =-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -- Andrey 'Case' Merkulov <me...@udm.ru>