31 |
void |
void |
32 |
parseKeyString (Display * dpy, MyKey * key, char *str) |
parseKeyString (Display * dpy, MyKey * key, char *str) |
33 |
{ |
{ |
34 |
char *k; |
char *k; |
35 |
|
|
36 |
#ifdef DEBUG |
#ifdef DEBUG |
37 |
printf ("entering parseKeyString\n"); |
printf ("entering parseKeyString\n"); |
38 |
printf ("key string=%s\n", str); |
printf ("key string=%s\n", str); |
39 |
#endif |
#endif |
40 |
|
|
41 |
key->keycode = 0; |
key->keycode = 0; |
42 |
key->modifier = 0; |
key->modifier = 0; |
43 |
|
|
44 |
if (!strcmp (str, "none")) |
if (!strcmp (str, "none")) |
45 |
return; |
return; |
46 |
|
|
47 |
k = strrchr (str, '+'); |
k = strrchr (str, '+'); |
48 |
if (k) |
if (k) |
49 |
{ |
{ |
50 |
key->keycode = XKeysymToKeycode (dpy, XStringToKeysym (k + 1)); |
key->keycode = XKeysymToKeycode (dpy, XStringToKeysym (k + 1)); |
51 |
if (strstr (str, "Shift")) |
if (strstr (str, "Shift")) |
52 |
key->modifier = key->modifier | ShiftMask; |
key->modifier = key->modifier | ShiftMask; |
53 |
if (strstr (str, "Control")) |
if (strstr (str, "Control")) |
54 |
key->modifier = key->modifier | ControlMask; |
key->modifier = key->modifier | ControlMask; |
55 |
if (strstr (str, "Mod1")) |
if (strstr (str, "Mod1")) |
56 |
key->modifier = key->modifier | Mod1Mask; |
key->modifier = key->modifier | Mod1Mask; |
57 |
if (strstr (str, "Mod2")) |
if (strstr (str, "Mod2")) |
58 |
key->modifier = key->modifier | Mod2Mask; |
key->modifier = key->modifier | Mod2Mask; |
59 |
if (strstr (str, "Mod3")) |
if (strstr (str, "Mod3")) |
60 |
key->modifier = key->modifier | Mod3Mask; |
key->modifier = key->modifier | Mod3Mask; |
61 |
if (strstr (str, "Mod4")) |
if (strstr (str, "Mod4")) |
62 |
key->modifier = key->modifier | Mod4Mask; |
key->modifier = key->modifier | Mod4Mask; |
63 |
if (strstr (str, "Mod5")) |
if (strstr (str, "Mod5")) |
64 |
key->modifier = key->modifier | Mod5Mask; |
key->modifier = key->modifier | Mod5Mask; |
65 |
} |
} |
66 |
} |
} |
67 |
|
|
68 |
void |
void |
69 |
grabKey (Display * dpy, MyKey * key, Window w) |
grabKey (Display * dpy, MyKey * key, Window w) |
70 |
{ |
{ |
71 |
#ifdef DEBUG |
#ifdef DEBUG |
72 |
printf ("entering grabKey\n"); |
printf ("entering grabKey\n"); |
73 |
#endif |
#endif |
74 |
|
|
75 |
if (key->keycode) |
if (key->keycode) |
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 | NumLockMask, 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, |
XGrabKey (dpy, key->keycode, key->modifier | CapsLockMask, w, False, |
82 |
GrabModeAsync, GrabModeAsync); |
GrabModeAsync, GrabModeAsync); |
83 |
XGrabKey (dpy, key->keycode, key->modifier | ScrollLockMask, w, False, |
XGrabKey (dpy, key->keycode, key->modifier | ScrollLockMask, w, False, |
84 |
GrabModeAsync, GrabModeAsync); |
GrabModeAsync, GrabModeAsync); |
85 |
XGrabKey (dpy, key->keycode, |
XGrabKey (dpy, key->keycode, |
86 |
key->modifier | CapsLockMask | ScrollLockMask, w, False, |
key->modifier | CapsLockMask | ScrollLockMask, w, False, |
87 |
GrabModeAsync, GrabModeAsync); |
GrabModeAsync, GrabModeAsync); |
88 |
XGrabKey (dpy, key->keycode, key->modifier | NumLockMask | CapsLockMask, |
XGrabKey (dpy, key->keycode, key->modifier | NumLockMask | CapsLockMask, |
89 |
w, False, GrabModeAsync, GrabModeAsync); |
w, False, GrabModeAsync, GrabModeAsync); |
90 |
XGrabKey (dpy, key->keycode, |
XGrabKey (dpy, key->keycode, |
91 |
key->modifier | NumLockMask | ScrollLockMask, w, False, |
key->modifier | NumLockMask | ScrollLockMask, w, False, |
92 |
GrabModeAsync, GrabModeAsync); |
GrabModeAsync, GrabModeAsync); |
93 |
XGrabKey (dpy, key->keycode, |
XGrabKey (dpy, key->keycode, |
94 |
key->modifier | NumLockMask | CapsLockMask | ScrollLockMask, |
key->modifier | NumLockMask | CapsLockMask | ScrollLockMask, |
95 |
w, False, GrabModeAsync, GrabModeAsync); |
w, False, GrabModeAsync, GrabModeAsync); |
96 |
} |
} |
97 |
} |
} |
98 |
|
|
99 |
void |
void |
100 |
ungrabKeys (Display * dpy, Window w) |
ungrabKeys (Display * dpy, Window w) |
101 |
{ |
{ |
102 |
#ifdef DEBUG |
#ifdef DEBUG |
103 |
printf ("entering ungrabKeys\n"); |
printf ("entering ungrabKeys\n"); |
104 |
#endif |
#endif |
105 |
|
|
106 |
XUngrabKey (dpy, AnyKey, AnyModifier, w); |
XUngrabKey (dpy, AnyKey, AnyModifier, w); |
107 |
} |
} |
108 |
|
|
109 |
void |
void |
110 |
init_keyboard (Display * dpy) |
init_keyboard (Display * dpy) |
111 |
{ |
{ |
112 |
XModifierKeymap *xmk = NULL; |
XModifierKeymap *xmk = NULL; |
113 |
KeyCode *map; |
KeyCode *map; |
114 |
int m, k; |
int m, k; |
115 |
|
|
116 |
#ifdef DEBUG |
#ifdef DEBUG |
117 |
printf ("init_keyboard\n"); |
printf ("init_keyboard\n"); |
118 |
#endif |
#endif |
119 |
|
|
120 |
xmk = XGetModifierMapping (dpy); |
xmk = XGetModifierMapping (dpy); |
121 |
if (xmk) |
if (xmk) |
122 |
{ |
{ |
123 |
map = xmk->modifiermap; |
map = xmk->modifiermap; |
124 |
for (m = 0; m < 8; m++) |
for (m = 0; m < 8; m++) |
125 |
for (k = 0; k < xmk->max_keypermod; k++, map++) |
for (k = 0; k < xmk->max_keypermod; k++, map++) |
126 |
{ |
{ |
127 |
if (*map == XKeysymToKeycode (dpy, XK_Num_Lock)) |
if (*map == XKeysymToKeycode (dpy, XK_Num_Lock)) |
128 |
NumLockMask = (1 << m); |
NumLockMask = (1 << m); |
129 |
if (*map == XKeysymToKeycode (dpy, XK_Caps_Lock)) |
if (*map == XKeysymToKeycode (dpy, XK_Caps_Lock)) |
130 |
CapsLockMask = (1 << m); |
CapsLockMask = (1 << m); |
131 |
if (*map == XKeysymToKeycode (dpy, XK_Scroll_Lock)) |
if (*map == XKeysymToKeycode (dpy, XK_Scroll_Lock)) |
132 |
ScrollLockMask = (1 << m); |
ScrollLockMask = (1 << m); |
133 |
} |
} |
134 |
XFreeModifiermap (xmk); |
XFreeModifiermap (xmk); |
135 |
} |
} |
136 |
} |
} |
137 |
|
|
138 |
/**This must remain at the end of the file.********** |
/**This must remain at the end of the file.********** |
139 |
* vim600:set sw=2 ts=8: * |
* vim600:set sw=2 ts=2: * |
140 |
* vim600:set cindent cinoptions={1s,>2s,^-1s,n-1s: * |
* vim600:set cindent cinoptions={1s,>2s,^-1s,n-1s: * |
141 |
* vim600:set foldmethod=marker: * |
* vim600:set foldmethod=marker: * |
142 |
****************************************************/ |
****************************************************/ |