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 <merao_AT_udm.ru>Received on Sun Mar 27 2011 - 20:18:43 CEST
This archive was generated by hypermail 2.2.0 : Sun Mar 27 2011 - 20:24:03 CEST