applied Neil Klopfstein's patch, slightly modified
344f35f9
1 file(s) · +8 −2
| 282 | 282 | [UnmapNotify] = unmapnotify |
|
| 283 | 283 | }; |
|
| 284 | 284 | static Atom wmatom[WMLast], netatom[NetLast]; |
|
| 285 | - | static Bool running = True; |
|
| 285 | + | static Bool running = True, usexkb; |
|
| 286 | 286 | static Cursor cursor[CurLast]; |
|
| 287 | 287 | static Display *dpy; |
|
| 288 | 288 | static DC dc; |
|
| 1069 | 1069 | XKeyEvent *ev; |
|
| 1070 | 1070 | ||
| 1071 | 1071 | ev = &e->xkey; |
|
| 1072 | - | keysym = XkbKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0, 0); |
|
| 1072 | + | if(usexkb) { |
|
| 1073 | + | keysym = XkbKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0, 0); |
|
| 1074 | + | else |
|
| 1075 | + | keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0); |
|
| 1073 | 1076 | for(i = 0; i < LENGTH(keys); i++) |
|
| 1074 | 1077 | if(keysym == keys[i].keysym |
|
| 1075 | 1078 | && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state) |
|
| 1579 | 1582 | void |
|
| 1580 | 1583 | setup(void) { |
|
| 1581 | 1584 | XSetWindowAttributes wa; |
|
| 1585 | + | int dummy = 0, xkbmajor = XkbMajorVersion, xkbminor = XkbMinorVersion; |
|
| 1582 | 1586 | ||
| 1583 | 1587 | /* clean up any zombies immediately */ |
|
| 1584 | 1588 | sigchld(0); |
|
| 1631 | 1635 | |EnterWindowMask|LeaveWindowMask|StructureNotifyMask|PropertyChangeMask; |
|
| 1632 | 1636 | XChangeWindowAttributes(dpy, root, CWEventMask|CWCursor, &wa); |
|
| 1633 | 1637 | XSelectInput(dpy, root, wa.event_mask); |
|
| 1638 | + | /* init xkb */ |
|
| 1639 | + | usexkb = XkbQueryExtension(dpy, &dummy, &dummy, &dummy, &xkb_major, &xkb_minor); |
|
| 1634 | 1640 | grabkeys(); |
|
| 1635 | 1641 | } |
|
| 1636 | 1642 | ||