- XUngrabKey(dpy, AnyKey, AnyModifier, root);
- for(i = 0; i < LENGTH(keys); i++) {
- code = XKeysymToKeycode(dpy, keys[i].keysym);
- XGrabKey(dpy, code, keys[i].mod, root, True,
- GrabModeAsync, GrabModeAsync);
- XGrabKey(dpy, code, keys[i].mod | LockMask, root, True,
- GrabModeAsync, GrabModeAsync);
- XGrabKey(dpy, code, keys[i].mod | numlockmask, root, True,
- GrabModeAsync, GrabModeAsync);
- XGrabKey(dpy, code, keys[i].mod | numlockmask | LockMask, root, True,
- GrabModeAsync, GrabModeAsync);
+ /* init modifier map */
+ modmap = XGetModifierMapping(dpy);
+ for(i = 0; i < 8; i++)
+ for(j = 0; j < modmap->max_keypermod; j++) {
+ if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock))
+ numlockmask = (1 << i);
+ }
+ XFreeModifiermap(modmap);
+
+ for(i = 0; i < mcount; i++) {
+ Monitor *m = &monitors[i];
+ XUngrabKey(dpy, AnyKey, AnyModifier, m->root);
+ for(j = 0; j < LENGTH(keys); j++) {
+ code = XKeysymToKeycode(dpy, keys[j].keysym);
+ XGrabKey(dpy, code, keys[j].mod, m->root, True,
+ GrabModeAsync, GrabModeAsync);
+ XGrabKey(dpy, code, keys[j].mod | LockMask, m->root, True,
+ GrabModeAsync, GrabModeAsync);
+ XGrabKey(dpy, code, keys[j].mod | numlockmask, m->root, True,
+ GrabModeAsync, GrabModeAsync);
+ XGrabKey(dpy, code, keys[j].mod | numlockmask | LockMask, m->root, True,
+ GrabModeAsync, GrabModeAsync);
+ }