21 |
*/ |
*/ |
22 |
|
|
23 |
#include <X11/Xlib.h> |
#include <X11/Xlib.h> |
24 |
|
#include <X11/Xutil.h> |
25 |
|
#include <X11/keysym.h> |
26 |
#include <stdlib.h> |
#include <stdlib.h> |
27 |
#include <stdio.h> |
#include <stdio.h> |
28 |
#include <string.h> |
#include <string.h> |
76 |
{ |
{ |
77 |
XGrabKey (dpy, key->keycode, key->modifier, w, False, GrabModeAsync, |
XGrabKey (dpy, key->keycode, key->modifier, w, False, GrabModeAsync, |
78 |
GrabModeAsync); |
GrabModeAsync); |
79 |
XGrabKey (dpy, key->keycode, key->modifier | LockMask, w, False, |
XGrabKey (dpy, key->keycode, key->modifier | NumLockMask, w, False, |
80 |
GrabModeAsync, GrabModeAsync); |
GrabModeAsync, GrabModeAsync); |
81 |
|
XGrabKey (dpy, key->keycode, key->modifier | CapsLockMask, w, False, |
82 |
|
GrabModeAsync, GrabModeAsync); |
83 |
|
XGrabKey (dpy, key->keycode, key->modifier | ScrollLockMask, w, False, |
84 |
|
GrabModeAsync, GrabModeAsync); |
85 |
|
XGrabKey (dpy, key->keycode, key->modifier | NumLockMask | CapsLockMask, |
86 |
|
w, False, GrabModeAsync, GrabModeAsync); |
87 |
|
XGrabKey (dpy, key->keycode, |
88 |
|
key->modifier | NumLockMask | ScrollLockMask, w, False, |
89 |
|
GrabModeAsync, GrabModeAsync); |
90 |
|
XGrabKey (dpy, key->keycode, |
91 |
|
key->modifier | NumLockMask | CapsLockMask | ScrollLockMask, |
92 |
|
w, False, GrabModeAsync, GrabModeAsync); |
93 |
} |
} |
94 |
} |
} |
95 |
|
|
102 |
|
|
103 |
XUngrabKey (dpy, AnyKey, AnyModifier, w); |
XUngrabKey (dpy, AnyKey, AnyModifier, w); |
104 |
} |
} |
105 |
|
|
106 |
|
void |
107 |
|
init_keyboard (Display *dpy) |
108 |
|
{ |
109 |
|
XModifierKeymap *xmk = NULL; |
110 |
|
KeyCode *map; |
111 |
|
int m, k; |
112 |
|
|
113 |
|
#ifdef DEBUG |
114 |
|
printf ("init_keyboard\n"); |
115 |
|
#endif |
116 |
|
|
117 |
|
xmk = XGetModifierMapping (dpy); |
118 |
|
if (xmk) |
119 |
|
{ |
120 |
|
map = xmk->modifiermap; |
121 |
|
for (m = 0; m < 8; m++) |
122 |
|
for (k = 0; k < xmk->max_keypermod; k++, map++) |
123 |
|
{ |
124 |
|
if (*map == XKeysymToKeycode (dpy, XK_Num_Lock)) |
125 |
|
NumLockMask = (1 << m); |
126 |
|
if (*map == XKeysymToKeycode (dpy, XK_Caps_Lock)) |
127 |
|
CapsLockMask = (1 << m); |
128 |
|
if (*map == XKeysymToKeycode (dpy, XK_Scroll_Lock)) |
129 |
|
ScrollLockMask = (1 << m); |
130 |
|
} |
131 |
|
XFreeModifiermap (xmk); |
132 |
|
} |
133 |
|
} |