1 | /*
|
---|
2 | * synergy -- mouse and keyboard sharing utility
|
---|
3 | * Copyright (C) 2002 Chris Schoeneman
|
---|
4 | *
|
---|
5 | * This package is free software; you can redistribute it and/or
|
---|
6 | * modify it under the terms of the GNU General Public License
|
---|
7 | * found in the file COPYING that should have accompanied this file.
|
---|
8 | *
|
---|
9 | * This package is distributed in the hope that it will be useful,
|
---|
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
12 | * GNU General Public License for more details.
|
---|
13 | */
|
---|
14 |
|
---|
15 | #include "CXWindowsUtil.h"
|
---|
16 | #include "KeyTypes.h"
|
---|
17 | #include "CThread.h"
|
---|
18 | #include "CLog.h"
|
---|
19 | #include "CStringUtil.h"
|
---|
20 | #include <X11/Xatom.h>
|
---|
21 | #define XK_APL
|
---|
22 | #define XK_ARABIC
|
---|
23 | #define XK_ARMENIAN
|
---|
24 | #define XK_CAUCASUS
|
---|
25 | #define XK_CURRENCY
|
---|
26 | #define XK_CYRILLIC
|
---|
27 | #define XK_GEORGIAN
|
---|
28 | #define XK_GREEK
|
---|
29 | #define XK_HEBREW
|
---|
30 | #define XK_KATAKANA
|
---|
31 | #define XK_KOREAN
|
---|
32 | #define XK_LATIN1
|
---|
33 | #define XK_LATIN2
|
---|
34 | #define XK_LATIN3
|
---|
35 | #define XK_LATIN4
|
---|
36 | #define XK_LATIN8
|
---|
37 | #define XK_LATIN9
|
---|
38 | #define XK_MISCELLANY
|
---|
39 | #define XK_PUBLISHING
|
---|
40 | #define XK_SPECIAL
|
---|
41 | #define XK_TECHNICAL
|
---|
42 | #define XK_THAI
|
---|
43 | #define XK_VIETNAMESE
|
---|
44 | #define XK_XKB_KEYS
|
---|
45 | #include <X11/keysym.h>
|
---|
46 |
|
---|
47 | #if !defined(XK_OE)
|
---|
48 | #define XK_OE 0x13bc
|
---|
49 | #endif
|
---|
50 | #if !defined(XK_oe)
|
---|
51 | #define XK_oe 0x13bd
|
---|
52 | #endif
|
---|
53 | #if !defined(XK_Ydiaeresis)
|
---|
54 | #define XK_Ydiaeresis 0x13be
|
---|
55 | #endif
|
---|
56 |
|
---|
57 | /*
|
---|
58 | * This table maps keysym values into the corresponding ISO 10646
|
---|
59 | * (UCS, Unicode) values.
|
---|
60 | *
|
---|
61 | * The array keysymtab[] contains pairs of X11 keysym values for graphical
|
---|
62 | * characters and the corresponding Unicode value.
|
---|
63 | *
|
---|
64 | * Author: Markus G. Kuhn <http://www.cl.cam.ac.uk/~mgk25/>,
|
---|
65 | * University of Cambridge, April 2001
|
---|
66 | *
|
---|
67 | * Special thanks to Richard Verhoeven <river@win.tue.nl> for preparing
|
---|
68 | * an initial draft of the mapping table.
|
---|
69 | *
|
---|
70 | * This software is in the public domain. Share and enjoy!
|
---|
71 | */
|
---|
72 |
|
---|
73 | struct codepair {
|
---|
74 | KeySym keysym;
|
---|
75 | UInt32 ucs4;
|
---|
76 | } s_keymap[] = {
|
---|
77 | { XK_Aogonek, 0x0104 }, /* LATIN CAPITAL LETTER A WITH OGONEK */
|
---|
78 | { XK_breve, 0x02d8 }, /* BREVE */
|
---|
79 | { XK_Lstroke, 0x0141 }, /* LATIN CAPITAL LETTER L WITH STROKE */
|
---|
80 | { XK_Lcaron, 0x013d }, /* LATIN CAPITAL LETTER L WITH CARON */
|
---|
81 | { XK_Sacute, 0x015a }, /* LATIN CAPITAL LETTER S WITH ACUTE */
|
---|
82 | { XK_Scaron, 0x0160 }, /* LATIN CAPITAL LETTER S WITH CARON */
|
---|
83 | { XK_Scedilla, 0x015e }, /* LATIN CAPITAL LETTER S WITH CEDILLA */
|
---|
84 | { XK_Tcaron, 0x0164 }, /* LATIN CAPITAL LETTER T WITH CARON */
|
---|
85 | { XK_Zacute, 0x0179 }, /* LATIN CAPITAL LETTER Z WITH ACUTE */
|
---|
86 | { XK_Zcaron, 0x017d }, /* LATIN CAPITAL LETTER Z WITH CARON */
|
---|
87 | { XK_Zabovedot, 0x017b }, /* LATIN CAPITAL LETTER Z WITH DOT ABOVE */
|
---|
88 | { XK_aogonek, 0x0105 }, /* LATIN SMALL LETTER A WITH OGONEK */
|
---|
89 | { XK_ogonek, 0x02db }, /* OGONEK */
|
---|
90 | { XK_lstroke, 0x0142 }, /* LATIN SMALL LETTER L WITH STROKE */
|
---|
91 | { XK_lcaron, 0x013e }, /* LATIN SMALL LETTER L WITH CARON */
|
---|
92 | { XK_sacute, 0x015b }, /* LATIN SMALL LETTER S WITH ACUTE */
|
---|
93 | { XK_caron, 0x02c7 }, /* CARON */
|
---|
94 | { XK_scaron, 0x0161 }, /* LATIN SMALL LETTER S WITH CARON */
|
---|
95 | { XK_scedilla, 0x015f }, /* LATIN SMALL LETTER S WITH CEDILLA */
|
---|
96 | { XK_tcaron, 0x0165 }, /* LATIN SMALL LETTER T WITH CARON */
|
---|
97 | { XK_zacute, 0x017a }, /* LATIN SMALL LETTER Z WITH ACUTE */
|
---|
98 | { XK_doubleacute, 0x02dd }, /* DOUBLE ACUTE ACCENT */
|
---|
99 | { XK_zcaron, 0x017e }, /* LATIN SMALL LETTER Z WITH CARON */
|
---|
100 | { XK_zabovedot, 0x017c }, /* LATIN SMALL LETTER Z WITH DOT ABOVE */
|
---|
101 | { XK_Racute, 0x0154 }, /* LATIN CAPITAL LETTER R WITH ACUTE */
|
---|
102 | { XK_Abreve, 0x0102 }, /* LATIN CAPITAL LETTER A WITH BREVE */
|
---|
103 | { XK_Lacute, 0x0139 }, /* LATIN CAPITAL LETTER L WITH ACUTE */
|
---|
104 | { XK_Cacute, 0x0106 }, /* LATIN CAPITAL LETTER C WITH ACUTE */
|
---|
105 | { XK_Ccaron, 0x010c }, /* LATIN CAPITAL LETTER C WITH CARON */
|
---|
106 | { XK_Eogonek, 0x0118 }, /* LATIN CAPITAL LETTER E WITH OGONEK */
|
---|
107 | { XK_Ecaron, 0x011a }, /* LATIN CAPITAL LETTER E WITH CARON */
|
---|
108 | { XK_Dcaron, 0x010e }, /* LATIN CAPITAL LETTER D WITH CARON */
|
---|
109 | { XK_Dstroke, 0x0110 }, /* LATIN CAPITAL LETTER D WITH STROKE */
|
---|
110 | { XK_Nacute, 0x0143 }, /* LATIN CAPITAL LETTER N WITH ACUTE */
|
---|
111 | { XK_Ncaron, 0x0147 }, /* LATIN CAPITAL LETTER N WITH CARON */
|
---|
112 | { XK_Odoubleacute, 0x0150 }, /* LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */
|
---|
113 | { XK_Rcaron, 0x0158 }, /* LATIN CAPITAL LETTER R WITH CARON */
|
---|
114 | { XK_Uring, 0x016e }, /* LATIN CAPITAL LETTER U WITH RING ABOVE */
|
---|
115 | { XK_Udoubleacute, 0x0170 }, /* LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */
|
---|
116 | { XK_Tcedilla, 0x0162 }, /* LATIN CAPITAL LETTER T WITH CEDILLA */
|
---|
117 | { XK_racute, 0x0155 }, /* LATIN SMALL LETTER R WITH ACUTE */
|
---|
118 | { XK_abreve, 0x0103 }, /* LATIN SMALL LETTER A WITH BREVE */
|
---|
119 | { XK_lacute, 0x013a }, /* LATIN SMALL LETTER L WITH ACUTE */
|
---|
120 | { XK_cacute, 0x0107 }, /* LATIN SMALL LETTER C WITH ACUTE */
|
---|
121 | { XK_ccaron, 0x010d }, /* LATIN SMALL LETTER C WITH CARON */
|
---|
122 | { XK_eogonek, 0x0119 }, /* LATIN SMALL LETTER E WITH OGONEK */
|
---|
123 | { XK_ecaron, 0x011b }, /* LATIN SMALL LETTER E WITH CARON */
|
---|
124 | { XK_dcaron, 0x010f }, /* LATIN SMALL LETTER D WITH CARON */
|
---|
125 | { XK_dstroke, 0x0111 }, /* LATIN SMALL LETTER D WITH STROKE */
|
---|
126 | { XK_nacute, 0x0144 }, /* LATIN SMALL LETTER N WITH ACUTE */
|
---|
127 | { XK_ncaron, 0x0148 }, /* LATIN SMALL LETTER N WITH CARON */
|
---|
128 | { XK_odoubleacute, 0x0151 }, /* LATIN SMALL LETTER O WITH DOUBLE ACUTE */
|
---|
129 | { XK_rcaron, 0x0159 }, /* LATIN SMALL LETTER R WITH CARON */
|
---|
130 | { XK_uring, 0x016f }, /* LATIN SMALL LETTER U WITH RING ABOVE */
|
---|
131 | { XK_udoubleacute, 0x0171 }, /* LATIN SMALL LETTER U WITH DOUBLE ACUTE */
|
---|
132 | { XK_tcedilla, 0x0163 }, /* LATIN SMALL LETTER T WITH CEDILLA */
|
---|
133 | { XK_abovedot, 0x02d9 }, /* DOT ABOVE */
|
---|
134 | { XK_Hstroke, 0x0126 }, /* LATIN CAPITAL LETTER H WITH STROKE */
|
---|
135 | { XK_Hcircumflex, 0x0124 }, /* LATIN CAPITAL LETTER H WITH CIRCUMFLEX */
|
---|
136 | { XK_Iabovedot, 0x0130 }, /* LATIN CAPITAL LETTER I WITH DOT ABOVE */
|
---|
137 | { XK_Gbreve, 0x011e }, /* LATIN CAPITAL LETTER G WITH BREVE */
|
---|
138 | { XK_Jcircumflex, 0x0134 }, /* LATIN CAPITAL LETTER J WITH CIRCUMFLEX */
|
---|
139 | { XK_hstroke, 0x0127 }, /* LATIN SMALL LETTER H WITH STROKE */
|
---|
140 | { XK_hcircumflex, 0x0125 }, /* LATIN SMALL LETTER H WITH CIRCUMFLEX */
|
---|
141 | { XK_idotless, 0x0131 }, /* LATIN SMALL LETTER DOTLESS I */
|
---|
142 | { XK_gbreve, 0x011f }, /* LATIN SMALL LETTER G WITH BREVE */
|
---|
143 | { XK_jcircumflex, 0x0135 }, /* LATIN SMALL LETTER J WITH CIRCUMFLEX */
|
---|
144 | { XK_Cabovedot, 0x010a }, /* LATIN CAPITAL LETTER C WITH DOT ABOVE */
|
---|
145 | { XK_Ccircumflex, 0x0108 }, /* LATIN CAPITAL LETTER C WITH CIRCUMFLEX */
|
---|
146 | { XK_Gabovedot, 0x0120 }, /* LATIN CAPITAL LETTER G WITH DOT ABOVE */
|
---|
147 | { XK_Gcircumflex, 0x011c }, /* LATIN CAPITAL LETTER G WITH CIRCUMFLEX */
|
---|
148 | { XK_Ubreve, 0x016c }, /* LATIN CAPITAL LETTER U WITH BREVE */
|
---|
149 | { XK_Scircumflex, 0x015c }, /* LATIN CAPITAL LETTER S WITH CIRCUMFLEX */
|
---|
150 | { XK_cabovedot, 0x010b }, /* LATIN SMALL LETTER C WITH DOT ABOVE */
|
---|
151 | { XK_ccircumflex, 0x0109 }, /* LATIN SMALL LETTER C WITH CIRCUMFLEX */
|
---|
152 | { XK_gabovedot, 0x0121 }, /* LATIN SMALL LETTER G WITH DOT ABOVE */
|
---|
153 | { XK_gcircumflex, 0x011d }, /* LATIN SMALL LETTER G WITH CIRCUMFLEX */
|
---|
154 | { XK_ubreve, 0x016d }, /* LATIN SMALL LETTER U WITH BREVE */
|
---|
155 | { XK_scircumflex, 0x015d }, /* LATIN SMALL LETTER S WITH CIRCUMFLEX */
|
---|
156 | { XK_kra, 0x0138 }, /* LATIN SMALL LETTER KRA */
|
---|
157 | { XK_Rcedilla, 0x0156 }, /* LATIN CAPITAL LETTER R WITH CEDILLA */
|
---|
158 | { XK_Itilde, 0x0128 }, /* LATIN CAPITAL LETTER I WITH TILDE */
|
---|
159 | { XK_Lcedilla, 0x013b }, /* LATIN CAPITAL LETTER L WITH CEDILLA */
|
---|
160 | { XK_Emacron, 0x0112 }, /* LATIN CAPITAL LETTER E WITH MACRON */
|
---|
161 | { XK_Gcedilla, 0x0122 }, /* LATIN CAPITAL LETTER G WITH CEDILLA */
|
---|
162 | { XK_Tslash, 0x0166 }, /* LATIN CAPITAL LETTER T WITH STROKE */
|
---|
163 | { XK_rcedilla, 0x0157 }, /* LATIN SMALL LETTER R WITH CEDILLA */
|
---|
164 | { XK_itilde, 0x0129 }, /* LATIN SMALL LETTER I WITH TILDE */
|
---|
165 | { XK_lcedilla, 0x013c }, /* LATIN SMALL LETTER L WITH CEDILLA */
|
---|
166 | { XK_emacron, 0x0113 }, /* LATIN SMALL LETTER E WITH MACRON */
|
---|
167 | { XK_gcedilla, 0x0123 }, /* LATIN SMALL LETTER G WITH CEDILLA */
|
---|
168 | { XK_tslash, 0x0167 }, /* LATIN SMALL LETTER T WITH STROKE */
|
---|
169 | { XK_ENG, 0x014a }, /* LATIN CAPITAL LETTER ENG */
|
---|
170 | { XK_eng, 0x014b }, /* LATIN SMALL LETTER ENG */
|
---|
171 | { XK_Amacron, 0x0100 }, /* LATIN CAPITAL LETTER A WITH MACRON */
|
---|
172 | { XK_Iogonek, 0x012e }, /* LATIN CAPITAL LETTER I WITH OGONEK */
|
---|
173 | { XK_Eabovedot, 0x0116 }, /* LATIN CAPITAL LETTER E WITH DOT ABOVE */
|
---|
174 | { XK_Imacron, 0x012a }, /* LATIN CAPITAL LETTER I WITH MACRON */
|
---|
175 | { XK_Ncedilla, 0x0145 }, /* LATIN CAPITAL LETTER N WITH CEDILLA */
|
---|
176 | { XK_Omacron, 0x014c }, /* LATIN CAPITAL LETTER O WITH MACRON */
|
---|
177 | { XK_Kcedilla, 0x0136 }, /* LATIN CAPITAL LETTER K WITH CEDILLA */
|
---|
178 | { XK_Uogonek, 0x0172 }, /* LATIN CAPITAL LETTER U WITH OGONEK */
|
---|
179 | { XK_Utilde, 0x0168 }, /* LATIN CAPITAL LETTER U WITH TILDE */
|
---|
180 | { XK_Umacron, 0x016a }, /* LATIN CAPITAL LETTER U WITH MACRON */
|
---|
181 | { XK_amacron, 0x0101 }, /* LATIN SMALL LETTER A WITH MACRON */
|
---|
182 | { XK_iogonek, 0x012f }, /* LATIN SMALL LETTER I WITH OGONEK */
|
---|
183 | { XK_eabovedot, 0x0117 }, /* LATIN SMALL LETTER E WITH DOT ABOVE */
|
---|
184 | { XK_imacron, 0x012b }, /* LATIN SMALL LETTER I WITH MACRON */
|
---|
185 | { XK_ncedilla, 0x0146 }, /* LATIN SMALL LETTER N WITH CEDILLA */
|
---|
186 | { XK_omacron, 0x014d }, /* LATIN SMALL LETTER O WITH MACRON */
|
---|
187 | { XK_kcedilla, 0x0137 }, /* LATIN SMALL LETTER K WITH CEDILLA */
|
---|
188 | { XK_uogonek, 0x0173 }, /* LATIN SMALL LETTER U WITH OGONEK */
|
---|
189 | { XK_utilde, 0x0169 }, /* LATIN SMALL LETTER U WITH TILDE */
|
---|
190 | { XK_umacron, 0x016b }, /* LATIN SMALL LETTER U WITH MACRON */
|
---|
191 | { XK_Babovedot, 0x1e02 }, /* LATIN CAPITAL LETTER B WITH DOT ABOVE */
|
---|
192 | { XK_babovedot, 0x1e03 }, /* LATIN SMALL LETTER B WITH DOT ABOVE */
|
---|
193 | { XK_Dabovedot, 0x1e0a }, /* LATIN CAPITAL LETTER D WITH DOT ABOVE */
|
---|
194 | { XK_Wgrave, 0x1e80 }, /* LATIN CAPITAL LETTER W WITH GRAVE */
|
---|
195 | { XK_Wacute, 0x1e82 }, /* LATIN CAPITAL LETTER W WITH ACUTE */
|
---|
196 | { XK_dabovedot, 0x1e0b }, /* LATIN SMALL LETTER D WITH DOT ABOVE */
|
---|
197 | { XK_Ygrave, 0x1ef2 }, /* LATIN CAPITAL LETTER Y WITH GRAVE */
|
---|
198 | { XK_Fabovedot, 0x1e1e }, /* LATIN CAPITAL LETTER F WITH DOT ABOVE */
|
---|
199 | { XK_fabovedot, 0x1e1f }, /* LATIN SMALL LETTER F WITH DOT ABOVE */
|
---|
200 | { XK_Mabovedot, 0x1e40 }, /* LATIN CAPITAL LETTER M WITH DOT ABOVE */
|
---|
201 | { XK_mabovedot, 0x1e41 }, /* LATIN SMALL LETTER M WITH DOT ABOVE */
|
---|
202 | { XK_Pabovedot, 0x1e56 }, /* LATIN CAPITAL LETTER P WITH DOT ABOVE */
|
---|
203 | { XK_wgrave, 0x1e81 }, /* LATIN SMALL LETTER W WITH GRAVE */
|
---|
204 | { XK_pabovedot, 0x1e57 }, /* LATIN SMALL LETTER P WITH DOT ABOVE */
|
---|
205 | { XK_wacute, 0x1e83 }, /* LATIN SMALL LETTER W WITH ACUTE */
|
---|
206 | { XK_Sabovedot, 0x1e60 }, /* LATIN CAPITAL LETTER S WITH DOT ABOVE */
|
---|
207 | { XK_ygrave, 0x1ef3 }, /* LATIN SMALL LETTER Y WITH GRAVE */
|
---|
208 | { XK_Wdiaeresis, 0x1e84 }, /* LATIN CAPITAL LETTER W WITH DIAERESIS */
|
---|
209 | { XK_wdiaeresis, 0x1e85 }, /* LATIN SMALL LETTER W WITH DIAERESIS */
|
---|
210 | { XK_sabovedot, 0x1e61 }, /* LATIN SMALL LETTER S WITH DOT ABOVE */
|
---|
211 | { XK_Wcircumflex, 0x0174 }, /* LATIN CAPITAL LETTER W WITH CIRCUMFLEX */
|
---|
212 | { XK_Tabovedot, 0x1e6a }, /* LATIN CAPITAL LETTER T WITH DOT ABOVE */
|
---|
213 | { XK_Ycircumflex, 0x0176 }, /* LATIN CAPITAL LETTER Y WITH CIRCUMFLEX */
|
---|
214 | { XK_wcircumflex, 0x0175 }, /* LATIN SMALL LETTER W WITH CIRCUMFLEX */
|
---|
215 | { XK_tabovedot, 0x1e6b }, /* LATIN SMALL LETTER T WITH DOT ABOVE */
|
---|
216 | { XK_ycircumflex, 0x0177 }, /* LATIN SMALL LETTER Y WITH CIRCUMFLEX */
|
---|
217 | { XK_overline, 0x203e }, /* OVERLINE */
|
---|
218 | { XK_kana_fullstop, 0x3002 }, /* IDEOGRAPHIC FULL STOP */
|
---|
219 | { XK_kana_openingbracket, 0x300c }, /* LEFT CORNER BRACKET */
|
---|
220 | { XK_kana_closingbracket, 0x300d }, /* RIGHT CORNER BRACKET */
|
---|
221 | { XK_kana_comma, 0x3001 }, /* IDEOGRAPHIC COMMA */
|
---|
222 | { XK_kana_conjunctive, 0x30fb }, /* KATAKANA MIDDLE DOT */
|
---|
223 | { XK_kana_WO, 0x30f2 }, /* KATAKANA LETTER WO */
|
---|
224 | { XK_kana_a, 0x30a1 }, /* KATAKANA LETTER SMALL A */
|
---|
225 | { XK_kana_i, 0x30a3 }, /* KATAKANA LETTER SMALL I */
|
---|
226 | { XK_kana_u, 0x30a5 }, /* KATAKANA LETTER SMALL U */
|
---|
227 | { XK_kana_e, 0x30a7 }, /* KATAKANA LETTER SMALL E */
|
---|
228 | { XK_kana_o, 0x30a9 }, /* KATAKANA LETTER SMALL O */
|
---|
229 | { XK_kana_ya, 0x30e3 }, /* KATAKANA LETTER SMALL YA */
|
---|
230 | { XK_kana_yu, 0x30e5 }, /* KATAKANA LETTER SMALL YU */
|
---|
231 | { XK_kana_yo, 0x30e7 }, /* KATAKANA LETTER SMALL YO */
|
---|
232 | { XK_kana_tsu, 0x30c3 }, /* KATAKANA LETTER SMALL TU */
|
---|
233 | { XK_prolongedsound, 0x30fc }, /* KATAKANA-HIRAGANA PROLONGED SOUND MARK */
|
---|
234 | { XK_kana_A, 0x30a2 }, /* KATAKANA LETTER A */
|
---|
235 | { XK_kana_I, 0x30a4 }, /* KATAKANA LETTER I */
|
---|
236 | { XK_kana_U, 0x30a6 }, /* KATAKANA LETTER U */
|
---|
237 | { XK_kana_E, 0x30a8 }, /* KATAKANA LETTER E */
|
---|
238 | { XK_kana_O, 0x30aa }, /* KATAKANA LETTER O */
|
---|
239 | { XK_kana_KA, 0x30ab }, /* KATAKANA LETTER KA */
|
---|
240 | { XK_kana_KI, 0x30ad }, /* KATAKANA LETTER KI */
|
---|
241 | { XK_kana_KU, 0x30af }, /* KATAKANA LETTER KU */
|
---|
242 | { XK_kana_KE, 0x30b1 }, /* KATAKANA LETTER KE */
|
---|
243 | { XK_kana_KO, 0x30b3 }, /* KATAKANA LETTER KO */
|
---|
244 | { XK_kana_SA, 0x30b5 }, /* KATAKANA LETTER SA */
|
---|
245 | { XK_kana_SHI, 0x30b7 }, /* KATAKANA LETTER SI */
|
---|
246 | { XK_kana_SU, 0x30b9 }, /* KATAKANA LETTER SU */
|
---|
247 | { XK_kana_SE, 0x30bb }, /* KATAKANA LETTER SE */
|
---|
248 | { XK_kana_SO, 0x30bd }, /* KATAKANA LETTER SO */
|
---|
249 | { XK_kana_TA, 0x30bf }, /* KATAKANA LETTER TA */
|
---|
250 | { XK_kana_CHI, 0x30c1 }, /* KATAKANA LETTER TI */
|
---|
251 | { XK_kana_TSU, 0x30c4 }, /* KATAKANA LETTER TU */
|
---|
252 | { XK_kana_TE, 0x30c6 }, /* KATAKANA LETTER TE */
|
---|
253 | { XK_kana_TO, 0x30c8 }, /* KATAKANA LETTER TO */
|
---|
254 | { XK_kana_NA, 0x30ca }, /* KATAKANA LETTER NA */
|
---|
255 | { XK_kana_NI, 0x30cb }, /* KATAKANA LETTER NI */
|
---|
256 | { XK_kana_NU, 0x30cc }, /* KATAKANA LETTER NU */
|
---|
257 | { XK_kana_NE, 0x30cd }, /* KATAKANA LETTER NE */
|
---|
258 | { XK_kana_NO, 0x30ce }, /* KATAKANA LETTER NO */
|
---|
259 | { XK_kana_HA, 0x30cf }, /* KATAKANA LETTER HA */
|
---|
260 | { XK_kana_HI, 0x30d2 }, /* KATAKANA LETTER HI */
|
---|
261 | { XK_kana_FU, 0x30d5 }, /* KATAKANA LETTER HU */
|
---|
262 | { XK_kana_HE, 0x30d8 }, /* KATAKANA LETTER HE */
|
---|
263 | { XK_kana_HO, 0x30db }, /* KATAKANA LETTER HO */
|
---|
264 | { XK_kana_MA, 0x30de }, /* KATAKANA LETTER MA */
|
---|
265 | { XK_kana_MI, 0x30df }, /* KATAKANA LETTER MI */
|
---|
266 | { XK_kana_MU, 0x30e0 }, /* KATAKANA LETTER MU */
|
---|
267 | { XK_kana_ME, 0x30e1 }, /* KATAKANA LETTER ME */
|
---|
268 | { XK_kana_MO, 0x30e2 }, /* KATAKANA LETTER MO */
|
---|
269 | { XK_kana_YA, 0x30e4 }, /* KATAKANA LETTER YA */
|
---|
270 | { XK_kana_YU, 0x30e6 }, /* KATAKANA LETTER YU */
|
---|
271 | { XK_kana_YO, 0x30e8 }, /* KATAKANA LETTER YO */
|
---|
272 | { XK_kana_RA, 0x30e9 }, /* KATAKANA LETTER RA */
|
---|
273 | { XK_kana_RI, 0x30ea }, /* KATAKANA LETTER RI */
|
---|
274 | { XK_kana_RU, 0x30eb }, /* KATAKANA LETTER RU */
|
---|
275 | { XK_kana_RE, 0x30ec }, /* KATAKANA LETTER RE */
|
---|
276 | { XK_kana_RO, 0x30ed }, /* KATAKANA LETTER RO */
|
---|
277 | { XK_kana_WA, 0x30ef }, /* KATAKANA LETTER WA */
|
---|
278 | { XK_kana_N, 0x30f3 }, /* KATAKANA LETTER N */
|
---|
279 | { XK_voicedsound, 0x309b }, /* KATAKANA-HIRAGANA VOICED SOUND MARK */
|
---|
280 | { XK_semivoicedsound, 0x309c }, /* KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */
|
---|
281 | { XK_Farsi_0, 0x06f0 }, /* EXTENDED ARABIC-INDIC DIGIT 0 */
|
---|
282 | { XK_Farsi_1, 0x06f1 }, /* EXTENDED ARABIC-INDIC DIGIT 1 */
|
---|
283 | { XK_Farsi_2, 0x06f2 }, /* EXTENDED ARABIC-INDIC DIGIT 2 */
|
---|
284 | { XK_Farsi_3, 0x06f3 }, /* EXTENDED ARABIC-INDIC DIGIT 3 */
|
---|
285 | { XK_Farsi_4, 0x06f4 }, /* EXTENDED ARABIC-INDIC DIGIT 4 */
|
---|
286 | { XK_Farsi_5, 0x06f5 }, /* EXTENDED ARABIC-INDIC DIGIT 5 */
|
---|
287 | { XK_Farsi_6, 0x06f6 }, /* EXTENDED ARABIC-INDIC DIGIT 6 */
|
---|
288 | { XK_Farsi_7, 0x06f7 }, /* EXTENDED ARABIC-INDIC DIGIT 7 */
|
---|
289 | { XK_Farsi_8, 0x06f8 }, /* EXTENDED ARABIC-INDIC DIGIT 8 */
|
---|
290 | { XK_Farsi_9, 0x06f9 }, /* EXTENDED ARABIC-INDIC DIGIT 9 */
|
---|
291 | { XK_Arabic_percent, 0x066a }, /* ARABIC PERCENT */
|
---|
292 | { XK_Arabic_superscript_alef, 0x0670 }, /* ARABIC LETTER SUPERSCRIPT ALEF */
|
---|
293 | { XK_Arabic_tteh, 0x0679 }, /* ARABIC LETTER TTEH */
|
---|
294 | { XK_Arabic_peh, 0x067e }, /* ARABIC LETTER PEH */
|
---|
295 | { XK_Arabic_tcheh, 0x0686 }, /* ARABIC LETTER TCHEH */
|
---|
296 | { XK_Arabic_ddal, 0x0688 }, /* ARABIC LETTER DDAL */
|
---|
297 | { XK_Arabic_rreh, 0x0691 }, /* ARABIC LETTER RREH */
|
---|
298 | { XK_Arabic_comma, 0x060c }, /* ARABIC COMMA */
|
---|
299 | { XK_Arabic_fullstop, 0x06d4 }, /* ARABIC FULLSTOP */
|
---|
300 | { XK_Arabic_semicolon, 0x061b }, /* ARABIC SEMICOLON */
|
---|
301 | { XK_Arabic_0, 0x0660 }, /* ARABIC 0 */
|
---|
302 | { XK_Arabic_1, 0x0661 }, /* ARABIC 1 */
|
---|
303 | { XK_Arabic_2, 0x0662 }, /* ARABIC 2 */
|
---|
304 | { XK_Arabic_3, 0x0663 }, /* ARABIC 3 */
|
---|
305 | { XK_Arabic_4, 0x0664 }, /* ARABIC 4 */
|
---|
306 | { XK_Arabic_5, 0x0665 }, /* ARABIC 5 */
|
---|
307 | { XK_Arabic_6, 0x0666 }, /* ARABIC 6 */
|
---|
308 | { XK_Arabic_7, 0x0667 }, /* ARABIC 7 */
|
---|
309 | { XK_Arabic_8, 0x0668 }, /* ARABIC 8 */
|
---|
310 | { XK_Arabic_9, 0x0669 }, /* ARABIC 9 */
|
---|
311 | { XK_Arabic_question_mark, 0x061f }, /* ARABIC QUESTION MARK */
|
---|
312 | { XK_Arabic_hamza, 0x0621 }, /* ARABIC LETTER HAMZA */
|
---|
313 | { XK_Arabic_maddaonalef, 0x0622 }, /* ARABIC LETTER ALEF WITH MADDA ABOVE */
|
---|
314 | { XK_Arabic_hamzaonalef, 0x0623 }, /* ARABIC LETTER ALEF WITH HAMZA ABOVE */
|
---|
315 | { XK_Arabic_hamzaonwaw, 0x0624 }, /* ARABIC LETTER WAW WITH HAMZA ABOVE */
|
---|
316 | { XK_Arabic_hamzaunderalef, 0x0625 }, /* ARABIC LETTER ALEF WITH HAMZA BELOW */
|
---|
317 | { XK_Arabic_hamzaonyeh, 0x0626 }, /* ARABIC LETTER YEH WITH HAMZA ABOVE */
|
---|
318 | { XK_Arabic_alef, 0x0627 }, /* ARABIC LETTER ALEF */
|
---|
319 | { XK_Arabic_beh, 0x0628 }, /* ARABIC LETTER BEH */
|
---|
320 | { XK_Arabic_tehmarbuta, 0x0629 }, /* ARABIC LETTER TEH MARBUTA */
|
---|
321 | { XK_Arabic_teh, 0x062a }, /* ARABIC LETTER TEH */
|
---|
322 | { XK_Arabic_theh, 0x062b }, /* ARABIC LETTER THEH */
|
---|
323 | { XK_Arabic_jeem, 0x062c }, /* ARABIC LETTER JEEM */
|
---|
324 | { XK_Arabic_hah, 0x062d }, /* ARABIC LETTER HAH */
|
---|
325 | { XK_Arabic_khah, 0x062e }, /* ARABIC LETTER KHAH */
|
---|
326 | { XK_Arabic_dal, 0x062f }, /* ARABIC LETTER DAL */
|
---|
327 | { XK_Arabic_thal, 0x0630 }, /* ARABIC LETTER THAL */
|
---|
328 | { XK_Arabic_ra, 0x0631 }, /* ARABIC LETTER REH */
|
---|
329 | { XK_Arabic_zain, 0x0632 }, /* ARABIC LETTER ZAIN */
|
---|
330 | { XK_Arabic_seen, 0x0633 }, /* ARABIC LETTER SEEN */
|
---|
331 | { XK_Arabic_sheen, 0x0634 }, /* ARABIC LETTER SHEEN */
|
---|
332 | { XK_Arabic_sad, 0x0635 }, /* ARABIC LETTER SAD */
|
---|
333 | { XK_Arabic_dad, 0x0636 }, /* ARABIC LETTER DAD */
|
---|
334 | { XK_Arabic_tah, 0x0637 }, /* ARABIC LETTER TAH */
|
---|
335 | { XK_Arabic_zah, 0x0638 }, /* ARABIC LETTER ZAH */
|
---|
336 | { XK_Arabic_ain, 0x0639 }, /* ARABIC LETTER AIN */
|
---|
337 | { XK_Arabic_ghain, 0x063a }, /* ARABIC LETTER GHAIN */
|
---|
338 | { XK_Arabic_tatweel, 0x0640 }, /* ARABIC TATWEEL */
|
---|
339 | { XK_Arabic_feh, 0x0641 }, /* ARABIC LETTER FEH */
|
---|
340 | { XK_Arabic_qaf, 0x0642 }, /* ARABIC LETTER QAF */
|
---|
341 | { XK_Arabic_kaf, 0x0643 }, /* ARABIC LETTER KAF */
|
---|
342 | { XK_Arabic_lam, 0x0644 }, /* ARABIC LETTER LAM */
|
---|
343 | { XK_Arabic_meem, 0x0645 }, /* ARABIC LETTER MEEM */
|
---|
344 | { XK_Arabic_noon, 0x0646 }, /* ARABIC LETTER NOON */
|
---|
345 | { XK_Arabic_ha, 0x0647 }, /* ARABIC LETTER HEH */
|
---|
346 | { XK_Arabic_waw, 0x0648 }, /* ARABIC LETTER WAW */
|
---|
347 | { XK_Arabic_alefmaksura, 0x0649 }, /* ARABIC LETTER ALEF MAKSURA */
|
---|
348 | { XK_Arabic_yeh, 0x064a }, /* ARABIC LETTER YEH */
|
---|
349 | { XK_Arabic_fathatan, 0x064b }, /* ARABIC FATHATAN */
|
---|
350 | { XK_Arabic_dammatan, 0x064c }, /* ARABIC DAMMATAN */
|
---|
351 | { XK_Arabic_kasratan, 0x064d }, /* ARABIC KASRATAN */
|
---|
352 | { XK_Arabic_fatha, 0x064e }, /* ARABIC FATHA */
|
---|
353 | { XK_Arabic_damma, 0x064f }, /* ARABIC DAMMA */
|
---|
354 | { XK_Arabic_kasra, 0x0650 }, /* ARABIC KASRA */
|
---|
355 | { XK_Arabic_shadda, 0x0651 }, /* ARABIC SHADDA */
|
---|
356 | { XK_Arabic_sukun, 0x0652 }, /* ARABIC SUKUN */
|
---|
357 | { XK_Arabic_madda_above, 0x0653 }, /* ARABIC MADDA ABOVE */
|
---|
358 | { XK_Arabic_hamza_above, 0x0654 }, /* ARABIC HAMZA ABOVE */
|
---|
359 | { XK_Arabic_hamza_below, 0x0655 }, /* ARABIC HAMZA BELOW */
|
---|
360 | { XK_Arabic_jeh, 0x0698 }, /* ARABIC LETTER JEH */
|
---|
361 | { XK_Arabic_veh, 0x06a4 }, /* ARABIC LETTER VEH */
|
---|
362 | { XK_Arabic_keheh, 0x06a9 }, /* ARABIC LETTER KEHEH */
|
---|
363 | { XK_Arabic_gaf, 0x06af }, /* ARABIC LETTER GAF */
|
---|
364 | { XK_Arabic_noon_ghunna, 0x06ba }, /* ARABIC LETTER NOON GHUNNA */
|
---|
365 | { XK_Arabic_heh_doachashmee, 0x06be }, /* ARABIC LETTER HEH DOACHASHMEE */
|
---|
366 | { XK_Arabic_farsi_yeh, 0x06cc }, /* ARABIC LETTER FARSI YEH */
|
---|
367 | { XK_Arabic_yeh_baree, 0x06d2 }, /* ARABIC LETTER YEH BAREE */
|
---|
368 | { XK_Arabic_heh_goal, 0x06c1 }, /* ARABIC LETTER HEH GOAL */
|
---|
369 | { XK_Serbian_dje, 0x0452 }, /* CYRILLIC SMALL LETTER DJE */
|
---|
370 | { XK_Macedonia_gje, 0x0453 }, /* CYRILLIC SMALL LETTER GJE */
|
---|
371 | { XK_Cyrillic_io, 0x0451 }, /* CYRILLIC SMALL LETTER IO */
|
---|
372 | { XK_Ukrainian_ie, 0x0454 }, /* CYRILLIC SMALL LETTER UKRAINIAN IE */
|
---|
373 | { XK_Macedonia_dse, 0x0455 }, /* CYRILLIC SMALL LETTER DZE */
|
---|
374 | { XK_Ukrainian_i, 0x0456 }, /* CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */
|
---|
375 | { XK_Ukrainian_yi, 0x0457 }, /* CYRILLIC SMALL LETTER YI */
|
---|
376 | { XK_Cyrillic_je, 0x0458 }, /* CYRILLIC SMALL LETTER JE */
|
---|
377 | { XK_Cyrillic_lje, 0x0459 }, /* CYRILLIC SMALL LETTER LJE */
|
---|
378 | { XK_Cyrillic_nje, 0x045a }, /* CYRILLIC SMALL LETTER NJE */
|
---|
379 | { XK_Serbian_tshe, 0x045b }, /* CYRILLIC SMALL LETTER TSHE */
|
---|
380 | { XK_Macedonia_kje, 0x045c }, /* CYRILLIC SMALL LETTER KJE */
|
---|
381 | { XK_Ukrainian_ghe_with_upturn, 0x0491 }, /* CYRILLIC SMALL LETTER GHE WITH UPTURN */
|
---|
382 | { XK_Byelorussian_shortu, 0x045e }, /* CYRILLIC SMALL LETTER SHORT U */
|
---|
383 | { XK_Cyrillic_dzhe, 0x045f }, /* CYRILLIC SMALL LETTER DZHE */
|
---|
384 | { XK_numerosign, 0x2116 }, /* NUMERO SIGN */
|
---|
385 | { XK_Serbian_DJE, 0x0402 }, /* CYRILLIC CAPITAL LETTER DJE */
|
---|
386 | { XK_Macedonia_GJE, 0x0403 }, /* CYRILLIC CAPITAL LETTER GJE */
|
---|
387 | { XK_Cyrillic_IO, 0x0401 }, /* CYRILLIC CAPITAL LETTER IO */
|
---|
388 | { XK_Ukrainian_IE, 0x0404 }, /* CYRILLIC CAPITAL LETTER UKRAINIAN IE */
|
---|
389 | { XK_Macedonia_DSE, 0x0405 }, /* CYRILLIC CAPITAL LETTER DZE */
|
---|
390 | { XK_Ukrainian_I, 0x0406 }, /* CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */
|
---|
391 | { XK_Ukrainian_YI, 0x0407 }, /* CYRILLIC CAPITAL LETTER YI */
|
---|
392 | { XK_Cyrillic_JE, 0x0408 }, /* CYRILLIC CAPITAL LETTER JE */
|
---|
393 | { XK_Cyrillic_LJE, 0x0409 }, /* CYRILLIC CAPITAL LETTER LJE */
|
---|
394 | { XK_Cyrillic_NJE, 0x040a }, /* CYRILLIC CAPITAL LETTER NJE */
|
---|
395 | { XK_Serbian_TSHE, 0x040b }, /* CYRILLIC CAPITAL LETTER TSHE */
|
---|
396 | { XK_Macedonia_KJE, 0x040c }, /* CYRILLIC CAPITAL LETTER KJE */
|
---|
397 | { XK_Ukrainian_GHE_WITH_UPTURN, 0x0490 }, /* CYRILLIC CAPITAL LETTER GHE WITH UPTURN */
|
---|
398 | { XK_Byelorussian_SHORTU, 0x040e }, /* CYRILLIC CAPITAL LETTER SHORT U */
|
---|
399 | { XK_Cyrillic_DZHE, 0x040f }, /* CYRILLIC CAPITAL LETTER DZHE */
|
---|
400 | { XK_Cyrillic_yu, 0x044e }, /* CYRILLIC SMALL LETTER YU */
|
---|
401 | { XK_Cyrillic_a, 0x0430 }, /* CYRILLIC SMALL LETTER A */
|
---|
402 | { XK_Cyrillic_be, 0x0431 }, /* CYRILLIC SMALL LETTER BE */
|
---|
403 | { XK_Cyrillic_tse, 0x0446 }, /* CYRILLIC SMALL LETTER TSE */
|
---|
404 | { XK_Cyrillic_de, 0x0434 }, /* CYRILLIC SMALL LETTER DE */
|
---|
405 | { XK_Cyrillic_ie, 0x0435 }, /* CYRILLIC SMALL LETTER IE */
|
---|
406 | { XK_Cyrillic_ef, 0x0444 }, /* CYRILLIC SMALL LETTER EF */
|
---|
407 | { XK_Cyrillic_ghe, 0x0433 }, /* CYRILLIC SMALL LETTER GHE */
|
---|
408 | { XK_Cyrillic_ha, 0x0445 }, /* CYRILLIC SMALL LETTER HA */
|
---|
409 | { XK_Cyrillic_i, 0x0438 }, /* CYRILLIC SMALL LETTER I */
|
---|
410 | { XK_Cyrillic_shorti, 0x0439 }, /* CYRILLIC SMALL LETTER SHORT I */
|
---|
411 | { XK_Cyrillic_ka, 0x043a }, /* CYRILLIC SMALL LETTER KA */
|
---|
412 | { XK_Cyrillic_el, 0x043b }, /* CYRILLIC SMALL LETTER EL */
|
---|
413 | { XK_Cyrillic_em, 0x043c }, /* CYRILLIC SMALL LETTER EM */
|
---|
414 | { XK_Cyrillic_en, 0x043d }, /* CYRILLIC SMALL LETTER EN */
|
---|
415 | { XK_Cyrillic_o, 0x043e }, /* CYRILLIC SMALL LETTER O */
|
---|
416 | { XK_Cyrillic_pe, 0x043f }, /* CYRILLIC SMALL LETTER PE */
|
---|
417 | { XK_Cyrillic_ya, 0x044f }, /* CYRILLIC SMALL LETTER YA */
|
---|
418 | { XK_Cyrillic_er, 0x0440 }, /* CYRILLIC SMALL LETTER ER */
|
---|
419 | { XK_Cyrillic_es, 0x0441 }, /* CYRILLIC SMALL LETTER ES */
|
---|
420 | { XK_Cyrillic_te, 0x0442 }, /* CYRILLIC SMALL LETTER TE */
|
---|
421 | { XK_Cyrillic_u, 0x0443 }, /* CYRILLIC SMALL LETTER U */
|
---|
422 | { XK_Cyrillic_zhe, 0x0436 }, /* CYRILLIC SMALL LETTER ZHE */
|
---|
423 | { XK_Cyrillic_ve, 0x0432 }, /* CYRILLIC SMALL LETTER VE */
|
---|
424 | { XK_Cyrillic_softsign, 0x044c }, /* CYRILLIC SMALL LETTER SOFT SIGN */
|
---|
425 | { XK_Cyrillic_yeru, 0x044b }, /* CYRILLIC SMALL LETTER YERU */
|
---|
426 | { XK_Cyrillic_ze, 0x0437 }, /* CYRILLIC SMALL LETTER ZE */
|
---|
427 | { XK_Cyrillic_sha, 0x0448 }, /* CYRILLIC SMALL LETTER SHA */
|
---|
428 | { XK_Cyrillic_e, 0x044d }, /* CYRILLIC SMALL LETTER E */
|
---|
429 | { XK_Cyrillic_shcha, 0x0449 }, /* CYRILLIC SMALL LETTER SHCHA */
|
---|
430 | { XK_Cyrillic_che, 0x0447 }, /* CYRILLIC SMALL LETTER CHE */
|
---|
431 | { XK_Cyrillic_hardsign, 0x044a }, /* CYRILLIC SMALL LETTER HARD SIGN */
|
---|
432 | { XK_Cyrillic_YU, 0x042e }, /* CYRILLIC CAPITAL LETTER YU */
|
---|
433 | { XK_Cyrillic_A, 0x0410 }, /* CYRILLIC CAPITAL LETTER A */
|
---|
434 | { XK_Cyrillic_BE, 0x0411 }, /* CYRILLIC CAPITAL LETTER BE */
|
---|
435 | { XK_Cyrillic_TSE, 0x0426 }, /* CYRILLIC CAPITAL LETTER TSE */
|
---|
436 | { XK_Cyrillic_DE, 0x0414 }, /* CYRILLIC CAPITAL LETTER DE */
|
---|
437 | { XK_Cyrillic_IE, 0x0415 }, /* CYRILLIC CAPITAL LETTER IE */
|
---|
438 | { XK_Cyrillic_EF, 0x0424 }, /* CYRILLIC CAPITAL LETTER EF */
|
---|
439 | { XK_Cyrillic_GHE, 0x0413 }, /* CYRILLIC CAPITAL LETTER GHE */
|
---|
440 | { XK_Cyrillic_HA, 0x0425 }, /* CYRILLIC CAPITAL LETTER HA */
|
---|
441 | { XK_Cyrillic_I, 0x0418 }, /* CYRILLIC CAPITAL LETTER I */
|
---|
442 | { XK_Cyrillic_SHORTI, 0x0419 }, /* CYRILLIC CAPITAL LETTER SHORT I */
|
---|
443 | { XK_Cyrillic_KA, 0x041a }, /* CYRILLIC CAPITAL LETTER KA */
|
---|
444 | { XK_Cyrillic_EL, 0x041b }, /* CYRILLIC CAPITAL LETTER EL */
|
---|
445 | { XK_Cyrillic_EM, 0x041c }, /* CYRILLIC CAPITAL LETTER EM */
|
---|
446 | { XK_Cyrillic_EN, 0x041d }, /* CYRILLIC CAPITAL LETTER EN */
|
---|
447 | { XK_Cyrillic_O, 0x041e }, /* CYRILLIC CAPITAL LETTER O */
|
---|
448 | { XK_Cyrillic_PE, 0x041f }, /* CYRILLIC CAPITAL LETTER PE */
|
---|
449 | { XK_Cyrillic_YA, 0x042f }, /* CYRILLIC CAPITAL LETTER YA */
|
---|
450 | { XK_Cyrillic_ER, 0x0420 }, /* CYRILLIC CAPITAL LETTER ER */
|
---|
451 | { XK_Cyrillic_ES, 0x0421 }, /* CYRILLIC CAPITAL LETTER ES */
|
---|
452 | { XK_Cyrillic_TE, 0x0422 }, /* CYRILLIC CAPITAL LETTER TE */
|
---|
453 | { XK_Cyrillic_U, 0x0423 }, /* CYRILLIC CAPITAL LETTER U */
|
---|
454 | { XK_Cyrillic_ZHE, 0x0416 }, /* CYRILLIC CAPITAL LETTER ZHE */
|
---|
455 | { XK_Cyrillic_VE, 0x0412 }, /* CYRILLIC CAPITAL LETTER VE */
|
---|
456 | { XK_Cyrillic_SOFTSIGN, 0x042c }, /* CYRILLIC CAPITAL LETTER SOFT SIGN */
|
---|
457 | { XK_Cyrillic_YERU, 0x042b }, /* CYRILLIC CAPITAL LETTER YERU */
|
---|
458 | { XK_Cyrillic_ZE, 0x0417 }, /* CYRILLIC CAPITAL LETTER ZE */
|
---|
459 | { XK_Cyrillic_SHA, 0x0428 }, /* CYRILLIC CAPITAL LETTER SHA */
|
---|
460 | { XK_Cyrillic_E, 0x042d }, /* CYRILLIC CAPITAL LETTER E */
|
---|
461 | { XK_Cyrillic_SHCHA, 0x0429 }, /* CYRILLIC CAPITAL LETTER SHCHA */
|
---|
462 | { XK_Cyrillic_CHE, 0x0427 }, /* CYRILLIC CAPITAL LETTER CHE */
|
---|
463 | { XK_Cyrillic_HARDSIGN, 0x042a }, /* CYRILLIC CAPITAL LETTER HARD SIGN */
|
---|
464 | { XK_Greek_ALPHAaccent, 0x0386 }, /* GREEK CAPITAL LETTER ALPHA WITH TONOS */
|
---|
465 | { XK_Greek_EPSILONaccent, 0x0388 }, /* GREEK CAPITAL LETTER EPSILON WITH TONOS */
|
---|
466 | { XK_Greek_ETAaccent, 0x0389 }, /* GREEK CAPITAL LETTER ETA WITH TONOS */
|
---|
467 | { XK_Greek_IOTAaccent, 0x038a }, /* GREEK CAPITAL LETTER IOTA WITH TONOS */
|
---|
468 | { XK_Greek_IOTAdiaeresis, 0x03aa }, /* GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */
|
---|
469 | { XK_Greek_OMICRONaccent, 0x038c }, /* GREEK CAPITAL LETTER OMICRON WITH TONOS */
|
---|
470 | { XK_Greek_UPSILONaccent, 0x038e }, /* GREEK CAPITAL LETTER UPSILON WITH TONOS */
|
---|
471 | { XK_Greek_UPSILONdieresis, 0x03ab }, /* GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */
|
---|
472 | { XK_Greek_OMEGAaccent, 0x038f }, /* GREEK CAPITAL LETTER OMEGA WITH TONOS */
|
---|
473 | { XK_Greek_accentdieresis, 0x0385 }, /* GREEK DIALYTIKA TONOS */
|
---|
474 | { XK_Greek_horizbar, 0x2015 }, /* HORIZONTAL BAR */
|
---|
475 | { XK_Greek_alphaaccent, 0x03ac }, /* GREEK SMALL LETTER ALPHA WITH TONOS */
|
---|
476 | { XK_Greek_epsilonaccent, 0x03ad }, /* GREEK SMALL LETTER EPSILON WITH TONOS */
|
---|
477 | { XK_Greek_etaaccent, 0x03ae }, /* GREEK SMALL LETTER ETA WITH TONOS */
|
---|
478 | { XK_Greek_iotaaccent, 0x03af }, /* GREEK SMALL LETTER IOTA WITH TONOS */
|
---|
479 | { XK_Greek_iotadieresis, 0x03ca }, /* GREEK SMALL LETTER IOTA WITH DIALYTIKA */
|
---|
480 | { XK_Greek_iotaaccentdieresis, 0x0390 }, /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */
|
---|
481 | { XK_Greek_omicronaccent, 0x03cc }, /* GREEK SMALL LETTER OMICRON WITH TONOS */
|
---|
482 | { XK_Greek_upsilonaccent, 0x03cd }, /* GREEK SMALL LETTER UPSILON WITH TONOS */
|
---|
483 | { XK_Greek_upsilondieresis, 0x03cb }, /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA */
|
---|
484 | { XK_Greek_upsilonaccentdieresis, 0x03b0 }, /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */
|
---|
485 | { XK_Greek_omegaaccent, 0x03ce }, /* GREEK SMALL LETTER OMEGA WITH TONOS */
|
---|
486 | { XK_Greek_ALPHA, 0x0391 }, /* GREEK CAPITAL LETTER ALPHA */
|
---|
487 | { XK_Greek_BETA, 0x0392 }, /* GREEK CAPITAL LETTER BETA */
|
---|
488 | { XK_Greek_GAMMA, 0x0393 }, /* GREEK CAPITAL LETTER GAMMA */
|
---|
489 | { XK_Greek_DELTA, 0x0394 }, /* GREEK CAPITAL LETTER DELTA */
|
---|
490 | { XK_Greek_EPSILON, 0x0395 }, /* GREEK CAPITAL LETTER EPSILON */
|
---|
491 | { XK_Greek_ZETA, 0x0396 }, /* GREEK CAPITAL LETTER ZETA */
|
---|
492 | { XK_Greek_ETA, 0x0397 }, /* GREEK CAPITAL LETTER ETA */
|
---|
493 | { XK_Greek_THETA, 0x0398 }, /* GREEK CAPITAL LETTER THETA */
|
---|
494 | { XK_Greek_IOTA, 0x0399 }, /* GREEK CAPITAL LETTER IOTA */
|
---|
495 | { XK_Greek_KAPPA, 0x039a }, /* GREEK CAPITAL LETTER KAPPA */
|
---|
496 | { XK_Greek_LAMBDA, 0x039b }, /* GREEK CAPITAL LETTER LAMDA */
|
---|
497 | { XK_Greek_MU, 0x039c }, /* GREEK CAPITAL LETTER MU */
|
---|
498 | { XK_Greek_NU, 0x039d }, /* GREEK CAPITAL LETTER NU */
|
---|
499 | { XK_Greek_XI, 0x039e }, /* GREEK CAPITAL LETTER XI */
|
---|
500 | { XK_Greek_OMICRON, 0x039f }, /* GREEK CAPITAL LETTER OMICRON */
|
---|
501 | { XK_Greek_PI, 0x03a0 }, /* GREEK CAPITAL LETTER PI */
|
---|
502 | { XK_Greek_RHO, 0x03a1 }, /* GREEK CAPITAL LETTER RHO */
|
---|
503 | { XK_Greek_SIGMA, 0x03a3 }, /* GREEK CAPITAL LETTER SIGMA */
|
---|
504 | { XK_Greek_TAU, 0x03a4 }, /* GREEK CAPITAL LETTER TAU */
|
---|
505 | { XK_Greek_UPSILON, 0x03a5 }, /* GREEK CAPITAL LETTER UPSILON */
|
---|
506 | { XK_Greek_PHI, 0x03a6 }, /* GREEK CAPITAL LETTER PHI */
|
---|
507 | { XK_Greek_CHI, 0x03a7 }, /* GREEK CAPITAL LETTER CHI */
|
---|
508 | { XK_Greek_PSI, 0x03a8 }, /* GREEK CAPITAL LETTER PSI */
|
---|
509 | { XK_Greek_OMEGA, 0x03a9 }, /* GREEK CAPITAL LETTER OMEGA */
|
---|
510 | { XK_Greek_alpha, 0x03b1 }, /* GREEK SMALL LETTER ALPHA */
|
---|
511 | { XK_Greek_beta, 0x03b2 }, /* GREEK SMALL LETTER BETA */
|
---|
512 | { XK_Greek_gamma, 0x03b3 }, /* GREEK SMALL LETTER GAMMA */
|
---|
513 | { XK_Greek_delta, 0x03b4 }, /* GREEK SMALL LETTER DELTA */
|
---|
514 | { XK_Greek_epsilon, 0x03b5 }, /* GREEK SMALL LETTER EPSILON */
|
---|
515 | { XK_Greek_zeta, 0x03b6 }, /* GREEK SMALL LETTER ZETA */
|
---|
516 | { XK_Greek_eta, 0x03b7 }, /* GREEK SMALL LETTER ETA */
|
---|
517 | { XK_Greek_theta, 0x03b8 }, /* GREEK SMALL LETTER THETA */
|
---|
518 | { XK_Greek_iota, 0x03b9 }, /* GREEK SMALL LETTER IOTA */
|
---|
519 | { XK_Greek_kappa, 0x03ba }, /* GREEK SMALL LETTER KAPPA */
|
---|
520 | { XK_Greek_lambda, 0x03bb }, /* GREEK SMALL LETTER LAMDA */
|
---|
521 | { XK_Greek_mu, 0x03bc }, /* GREEK SMALL LETTER MU */
|
---|
522 | { XK_Greek_nu, 0x03bd }, /* GREEK SMALL LETTER NU */
|
---|
523 | { XK_Greek_xi, 0x03be }, /* GREEK SMALL LETTER XI */
|
---|
524 | { XK_Greek_omicron, 0x03bf }, /* GREEK SMALL LETTER OMICRON */
|
---|
525 | { XK_Greek_pi, 0x03c0 }, /* GREEK SMALL LETTER PI */
|
---|
526 | { XK_Greek_rho, 0x03c1 }, /* GREEK SMALL LETTER RHO */
|
---|
527 | { XK_Greek_sigma, 0x03c3 }, /* GREEK SMALL LETTER SIGMA */
|
---|
528 | { XK_Greek_finalsmallsigma, 0x03c2 }, /* GREEK SMALL LETTER FINAL SIGMA */
|
---|
529 | { XK_Greek_tau, 0x03c4 }, /* GREEK SMALL LETTER TAU */
|
---|
530 | { XK_Greek_upsilon, 0x03c5 }, /* GREEK SMALL LETTER UPSILON */
|
---|
531 | { XK_Greek_phi, 0x03c6 }, /* GREEK SMALL LETTER PHI */
|
---|
532 | { XK_Greek_chi, 0x03c7 }, /* GREEK SMALL LETTER CHI */
|
---|
533 | { XK_Greek_psi, 0x03c8 }, /* GREEK SMALL LETTER PSI */
|
---|
534 | { XK_Greek_omega, 0x03c9 }, /* GREEK SMALL LETTER OMEGA */
|
---|
535 | { XK_leftradical, 0x23b7 }, /* ??? */
|
---|
536 | { XK_topleftradical, 0x250c }, /* BOX DRAWINGS LIGHT DOWN AND RIGHT */
|
---|
537 | { XK_horizconnector, 0x2500 }, /* BOX DRAWINGS LIGHT HORIZONTAL */
|
---|
538 | { XK_topintegral, 0x2320 }, /* TOP HALF INTEGRAL */
|
---|
539 | { XK_botintegral, 0x2321 }, /* BOTTOM HALF INTEGRAL */
|
---|
540 | { XK_vertconnector, 0x2502 }, /* BOX DRAWINGS LIGHT VERTICAL */
|
---|
541 | { XK_topleftsqbracket, 0x23a1 }, /* ??? */
|
---|
542 | { XK_botleftsqbracket, 0x23a3 }, /* ??? */
|
---|
543 | { XK_toprightsqbracket, 0x23a4 }, /* ??? */
|
---|
544 | { XK_botrightsqbracket, 0x23a6 }, /* ??? */
|
---|
545 | { XK_topleftparens, 0x239b }, /* ??? */
|
---|
546 | { XK_botleftparens, 0x239d }, /* ??? */
|
---|
547 | { XK_toprightparens, 0x239e }, /* ??? */
|
---|
548 | { XK_botrightparens, 0x23a0 }, /* ??? */
|
---|
549 | { XK_leftmiddlecurlybrace, 0x23a8 }, /* ??? */
|
---|
550 | { XK_rightmiddlecurlybrace, 0x23ac }, /* ??? */
|
---|
551 | { XK_lessthanequal, 0x2264 }, /* LESS-THAN OR EQUAL TO */
|
---|
552 | { XK_notequal, 0x2260 }, /* NOT EQUAL TO */
|
---|
553 | { XK_greaterthanequal, 0x2265 }, /* GREATER-THAN OR EQUAL TO */
|
---|
554 | { XK_integral, 0x222b }, /* INTEGRAL */
|
---|
555 | { XK_therefore, 0x2234 }, /* THEREFORE */
|
---|
556 | { XK_variation, 0x221d }, /* PROPORTIONAL TO */
|
---|
557 | { XK_infinity, 0x221e }, /* INFINITY */
|
---|
558 | { XK_nabla, 0x2207 }, /* NABLA */
|
---|
559 | { XK_approximate, 0x223c }, /* TILDE OPERATOR */
|
---|
560 | { XK_similarequal, 0x2243 }, /* ASYMPTOTICALLY EQUAL TO */
|
---|
561 | { XK_ifonlyif, 0x21d4 }, /* LEFT RIGHT DOUBLE ARROW */
|
---|
562 | { XK_implies, 0x21d2 }, /* RIGHTWARDS DOUBLE ARROW */
|
---|
563 | { XK_identical, 0x2261 }, /* IDENTICAL TO */
|
---|
564 | { XK_radical, 0x221a }, /* SQUARE ROOT */
|
---|
565 | { XK_includedin, 0x2282 }, /* SUBSET OF */
|
---|
566 | { XK_includes, 0x2283 }, /* SUPERSET OF */
|
---|
567 | { XK_intersection, 0x2229 }, /* INTERSECTION */
|
---|
568 | { XK_union, 0x222a }, /* UNION */
|
---|
569 | { XK_logicaland, 0x2227 }, /* LOGICAL AND */
|
---|
570 | { XK_logicalor, 0x2228 }, /* LOGICAL OR */
|
---|
571 | { XK_partialderivative, 0x2202 }, /* PARTIAL DIFFERENTIAL */
|
---|
572 | { XK_function, 0x0192 }, /* LATIN SMALL LETTER F WITH HOOK */
|
---|
573 | { XK_leftarrow, 0x2190 }, /* LEFTWARDS ARROW */
|
---|
574 | { XK_uparrow, 0x2191 }, /* UPWARDS ARROW */
|
---|
575 | { XK_rightarrow, 0x2192 }, /* RIGHTWARDS ARROW */
|
---|
576 | { XK_downarrow, 0x2193 }, /* DOWNWARDS ARROW */
|
---|
577 | /*{ XK_blank, ??? }, */
|
---|
578 | { XK_soliddiamond, 0x25c6 }, /* BLACK DIAMOND */
|
---|
579 | { XK_checkerboard, 0x2592 }, /* MEDIUM SHADE */
|
---|
580 | { XK_ht, 0x2409 }, /* SYMBOL FOR HORIZONTAL TABULATION */
|
---|
581 | { XK_ff, 0x240c }, /* SYMBOL FOR FORM FEED */
|
---|
582 | { XK_cr, 0x240d }, /* SYMBOL FOR CARRIAGE RETURN */
|
---|
583 | { XK_lf, 0x240a }, /* SYMBOL FOR LINE FEED */
|
---|
584 | { XK_nl, 0x2424 }, /* SYMBOL FOR NEWLINE */
|
---|
585 | { XK_vt, 0x240b }, /* SYMBOL FOR VERTICAL TABULATION */
|
---|
586 | { XK_lowrightcorner, 0x2518 }, /* BOX DRAWINGS LIGHT UP AND LEFT */
|
---|
587 | { XK_uprightcorner, 0x2510 }, /* BOX DRAWINGS LIGHT DOWN AND LEFT */
|
---|
588 | { XK_upleftcorner, 0x250c }, /* BOX DRAWINGS LIGHT DOWN AND RIGHT */
|
---|
589 | { XK_lowleftcorner, 0x2514 }, /* BOX DRAWINGS LIGHT UP AND RIGHT */
|
---|
590 | { XK_crossinglines, 0x253c }, /* BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */
|
---|
591 | { XK_horizlinescan1, 0x23ba }, /* HORIZONTAL SCAN LINE-1 (Unicode 3.2 draft) */
|
---|
592 | { XK_horizlinescan3, 0x23bb }, /* HORIZONTAL SCAN LINE-3 (Unicode 3.2 draft) */
|
---|
593 | { XK_horizlinescan5, 0x2500 }, /* BOX DRAWINGS LIGHT HORIZONTAL */
|
---|
594 | { XK_horizlinescan7, 0x23bc }, /* HORIZONTAL SCAN LINE-7 (Unicode 3.2 draft) */
|
---|
595 | { XK_horizlinescan9, 0x23bd }, /* HORIZONTAL SCAN LINE-9 (Unicode 3.2 draft) */
|
---|
596 | { XK_leftt, 0x251c }, /* BOX DRAWINGS LIGHT VERTICAL AND RIGHT */
|
---|
597 | { XK_rightt, 0x2524 }, /* BOX DRAWINGS LIGHT VERTICAL AND LEFT */
|
---|
598 | { XK_bott, 0x2534 }, /* BOX DRAWINGS LIGHT UP AND HORIZONTAL */
|
---|
599 | { XK_topt, 0x252c }, /* BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */
|
---|
600 | { XK_vertbar, 0x2502 }, /* BOX DRAWINGS LIGHT VERTICAL */
|
---|
601 | { XK_emspace, 0x2003 }, /* EM SPACE */
|
---|
602 | { XK_enspace, 0x2002 }, /* EN SPACE */
|
---|
603 | { XK_em3space, 0x2004 }, /* THREE-PER-EM SPACE */
|
---|
604 | { XK_em4space, 0x2005 }, /* FOUR-PER-EM SPACE */
|
---|
605 | { XK_digitspace, 0x2007 }, /* FIGURE SPACE */
|
---|
606 | { XK_punctspace, 0x2008 }, /* PUNCTUATION SPACE */
|
---|
607 | { XK_thinspace, 0x2009 }, /* THIN SPACE */
|
---|
608 | { XK_hairspace, 0x200a }, /* HAIR SPACE */
|
---|
609 | { XK_emdash, 0x2014 }, /* EM DASH */
|
---|
610 | { XK_endash, 0x2013 }, /* EN DASH */
|
---|
611 | /*{ XK_signifblank, ??? }, */
|
---|
612 | { XK_ellipsis, 0x2026 }, /* HORIZONTAL ELLIPSIS */
|
---|
613 | { XK_doubbaselinedot, 0x2025 }, /* TWO DOT LEADER */
|
---|
614 | { XK_onethird, 0x2153 }, /* VULGAR FRACTION ONE THIRD */
|
---|
615 | { XK_twothirds, 0x2154 }, /* VULGAR FRACTION TWO THIRDS */
|
---|
616 | { XK_onefifth, 0x2155 }, /* VULGAR FRACTION ONE FIFTH */
|
---|
617 | { XK_twofifths, 0x2156 }, /* VULGAR FRACTION TWO FIFTHS */
|
---|
618 | { XK_threefifths, 0x2157 }, /* VULGAR FRACTION THREE FIFTHS */
|
---|
619 | { XK_fourfifths, 0x2158 }, /* VULGAR FRACTION FOUR FIFTHS */
|
---|
620 | { XK_onesixth, 0x2159 }, /* VULGAR FRACTION ONE SIXTH */
|
---|
621 | { XK_fivesixths, 0x215a }, /* VULGAR FRACTION FIVE SIXTHS */
|
---|
622 | { XK_careof, 0x2105 }, /* CARE OF */
|
---|
623 | { XK_figdash, 0x2012 }, /* FIGURE DASH */
|
---|
624 | { XK_leftanglebracket, 0x2329 }, /* LEFT-POINTING ANGLE BRACKET */
|
---|
625 | /*{ XK_decimalpoint, ??? }, */
|
---|
626 | { XK_rightanglebracket, 0x232a }, /* RIGHT-POINTING ANGLE BRACKET */
|
---|
627 | /*{ XK_marker, ??? }, */
|
---|
628 | { XK_oneeighth, 0x215b }, /* VULGAR FRACTION ONE EIGHTH */
|
---|
629 | { XK_threeeighths, 0x215c }, /* VULGAR FRACTION THREE EIGHTHS */
|
---|
630 | { XK_fiveeighths, 0x215d }, /* VULGAR FRACTION FIVE EIGHTHS */
|
---|
631 | { XK_seveneighths, 0x215e }, /* VULGAR FRACTION SEVEN EIGHTHS */
|
---|
632 | { XK_trademark, 0x2122 }, /* TRADE MARK SIGN */
|
---|
633 | { XK_signaturemark, 0x2613 }, /* SALTIRE */
|
---|
634 | /*{ XK_trademarkincircle, ??? }, */
|
---|
635 | { XK_leftopentriangle, 0x25c1 }, /* WHITE LEFT-POINTING TRIANGLE */
|
---|
636 | { XK_rightopentriangle, 0x25b7 }, /* WHITE RIGHT-POINTING TRIANGLE */
|
---|
637 | { XK_emopencircle, 0x25cb }, /* WHITE CIRCLE */
|
---|
638 | { XK_emopenrectangle, 0x25af }, /* WHITE VERTICAL RECTANGLE */
|
---|
639 | { XK_leftsinglequotemark, 0x2018 }, /* LEFT SINGLE QUOTATION MARK */
|
---|
640 | { XK_rightsinglequotemark, 0x2019 }, /* RIGHT SINGLE QUOTATION MARK */
|
---|
641 | { XK_leftdoublequotemark, 0x201c }, /* LEFT DOUBLE QUOTATION MARK */
|
---|
642 | { XK_rightdoublequotemark, 0x201d }, /* RIGHT DOUBLE QUOTATION MARK */
|
---|
643 | { XK_prescription, 0x211e }, /* PRESCRIPTION TAKE */
|
---|
644 | { XK_minutes, 0x2032 }, /* PRIME */
|
---|
645 | { XK_seconds, 0x2033 }, /* DOUBLE PRIME */
|
---|
646 | { XK_latincross, 0x271d }, /* LATIN CROSS */
|
---|
647 | /*{ XK_hexagram, ??? }, */
|
---|
648 | { XK_filledrectbullet, 0x25ac }, /* BLACK RECTANGLE */
|
---|
649 | { XK_filledlefttribullet, 0x25c0 }, /* BLACK LEFT-POINTING TRIANGLE */
|
---|
650 | { XK_filledrighttribullet, 0x25b6 }, /* BLACK RIGHT-POINTING TRIANGLE */
|
---|
651 | { XK_emfilledcircle, 0x25cf }, /* BLACK CIRCLE */
|
---|
652 | { XK_emfilledrect, 0x25ae }, /* BLACK VERTICAL RECTANGLE */
|
---|
653 | { XK_enopencircbullet, 0x25e6 }, /* WHITE BULLET */
|
---|
654 | { XK_enopensquarebullet, 0x25ab }, /* WHITE SMALL SQUARE */
|
---|
655 | { XK_openrectbullet, 0x25ad }, /* WHITE RECTANGLE */
|
---|
656 | { XK_opentribulletup, 0x25b3 }, /* WHITE UP-POINTING TRIANGLE */
|
---|
657 | { XK_opentribulletdown, 0x25bd }, /* WHITE DOWN-POINTING TRIANGLE */
|
---|
658 | { XK_openstar, 0x2606 }, /* WHITE STAR */
|
---|
659 | { XK_enfilledcircbullet, 0x2022 }, /* BULLET */
|
---|
660 | { XK_enfilledsqbullet, 0x25aa }, /* BLACK SMALL SQUARE */
|
---|
661 | { XK_filledtribulletup, 0x25b2 }, /* BLACK UP-POINTING TRIANGLE */
|
---|
662 | { XK_filledtribulletdown, 0x25bc }, /* BLACK DOWN-POINTING TRIANGLE */
|
---|
663 | { XK_leftpointer, 0x261c }, /* WHITE LEFT POINTING INDEX */
|
---|
664 | { XK_rightpointer, 0x261e }, /* WHITE RIGHT POINTING INDEX */
|
---|
665 | { XK_club, 0x2663 }, /* BLACK CLUB SUIT */
|
---|
666 | { XK_diamond, 0x2666 }, /* BLACK DIAMOND SUIT */
|
---|
667 | { XK_heart, 0x2665 }, /* BLACK HEART SUIT */
|
---|
668 | { XK_maltesecross, 0x2720 }, /* MALTESE CROSS */
|
---|
669 | { XK_dagger, 0x2020 }, /* DAGGER */
|
---|
670 | { XK_doubledagger, 0x2021 }, /* DOUBLE DAGGER */
|
---|
671 | { XK_checkmark, 0x2713 }, /* CHECK MARK */
|
---|
672 | { XK_ballotcross, 0x2717 }, /* BALLOT X */
|
---|
673 | { XK_musicalsharp, 0x266f }, /* MUSIC SHARP SIGN */
|
---|
674 | { XK_musicalflat, 0x266d }, /* MUSIC FLAT SIGN */
|
---|
675 | { XK_malesymbol, 0x2642 }, /* MALE SIGN */
|
---|
676 | { XK_femalesymbol, 0x2640 }, /* FEMALE SIGN */
|
---|
677 | { XK_telephone, 0x260e }, /* BLACK TELEPHONE */
|
---|
678 | { XK_telephonerecorder, 0x2315 }, /* TELEPHONE RECORDER */
|
---|
679 | { XK_phonographcopyright, 0x2117 }, /* SOUND RECORDING COPYRIGHT */
|
---|
680 | { XK_caret, 0x2038 }, /* CARET */
|
---|
681 | { XK_singlelowquotemark, 0x201a }, /* SINGLE LOW-9 QUOTATION MARK */
|
---|
682 | { XK_doublelowquotemark, 0x201e }, /* DOUBLE LOW-9 QUOTATION MARK */
|
---|
683 | /*{ XK_cursor, ??? }, */
|
---|
684 | { XK_leftcaret, 0x003c }, /* LESS-THAN SIGN */
|
---|
685 | { XK_rightcaret, 0x003e }, /* GREATER-THAN SIGN */
|
---|
686 | { XK_downcaret, 0x2228 }, /* LOGICAL OR */
|
---|
687 | { XK_upcaret, 0x2227 }, /* LOGICAL AND */
|
---|
688 | { XK_overbar, 0x00af }, /* MACRON */
|
---|
689 | { XK_downtack, 0x22a5 }, /* UP TACK */
|
---|
690 | { XK_upshoe, 0x2229 }, /* INTERSECTION */
|
---|
691 | { XK_downstile, 0x230a }, /* LEFT FLOOR */
|
---|
692 | { XK_underbar, 0x005f }, /* LOW LINE */
|
---|
693 | { XK_jot, 0x2218 }, /* RING OPERATOR */
|
---|
694 | { XK_quad, 0x2395 }, /* APL FUNCTIONAL SYMBOL QUAD */
|
---|
695 | { XK_uptack, 0x22a4 }, /* DOWN TACK */
|
---|
696 | { XK_circle, 0x25cb }, /* WHITE CIRCLE */
|
---|
697 | { XK_upstile, 0x2308 }, /* LEFT CEILING */
|
---|
698 | { XK_downshoe, 0x222a }, /* UNION */
|
---|
699 | { XK_rightshoe, 0x2283 }, /* SUPERSET OF */
|
---|
700 | { XK_leftshoe, 0x2282 }, /* SUBSET OF */
|
---|
701 | { XK_lefttack, 0x22a2 }, /* RIGHT TACK */
|
---|
702 | { XK_righttack, 0x22a3 }, /* LEFT TACK */
|
---|
703 | { XK_hebrew_doublelowline, 0x2017 }, /* DOUBLE LOW LINE */
|
---|
704 | { XK_hebrew_aleph, 0x05d0 }, /* HEBREW LETTER ALEF */
|
---|
705 | { XK_hebrew_bet, 0x05d1 }, /* HEBREW LETTER BET */
|
---|
706 | { XK_hebrew_gimel, 0x05d2 }, /* HEBREW LETTER GIMEL */
|
---|
707 | { XK_hebrew_dalet, 0x05d3 }, /* HEBREW LETTER DALET */
|
---|
708 | { XK_hebrew_he, 0x05d4 }, /* HEBREW LETTER HE */
|
---|
709 | { XK_hebrew_waw, 0x05d5 }, /* HEBREW LETTER VAV */
|
---|
710 | { XK_hebrew_zain, 0x05d6 }, /* HEBREW LETTER ZAYIN */
|
---|
711 | { XK_hebrew_chet, 0x05d7 }, /* HEBREW LETTER HET */
|
---|
712 | { XK_hebrew_tet, 0x05d8 }, /* HEBREW LETTER TET */
|
---|
713 | { XK_hebrew_yod, 0x05d9 }, /* HEBREW LETTER YOD */
|
---|
714 | { XK_hebrew_finalkaph, 0x05da }, /* HEBREW LETTER FINAL KAF */
|
---|
715 | { XK_hebrew_kaph, 0x05db }, /* HEBREW LETTER KAF */
|
---|
716 | { XK_hebrew_lamed, 0x05dc }, /* HEBREW LETTER LAMED */
|
---|
717 | { XK_hebrew_finalmem, 0x05dd }, /* HEBREW LETTER FINAL MEM */
|
---|
718 | { XK_hebrew_mem, 0x05de }, /* HEBREW LETTER MEM */
|
---|
719 | { XK_hebrew_finalnun, 0x05df }, /* HEBREW LETTER FINAL NUN */
|
---|
720 | { XK_hebrew_nun, 0x05e0 }, /* HEBREW LETTER NUN */
|
---|
721 | { XK_hebrew_samech, 0x05e1 }, /* HEBREW LETTER SAMEKH */
|
---|
722 | { XK_hebrew_ayin, 0x05e2 }, /* HEBREW LETTER AYIN */
|
---|
723 | { XK_hebrew_finalpe, 0x05e3 }, /* HEBREW LETTER FINAL PE */
|
---|
724 | { XK_hebrew_pe, 0x05e4 }, /* HEBREW LETTER PE */
|
---|
725 | { XK_hebrew_finalzade, 0x05e5 }, /* HEBREW LETTER FINAL TSADI */
|
---|
726 | { XK_hebrew_zade, 0x05e6 }, /* HEBREW LETTER TSADI */
|
---|
727 | { XK_hebrew_qoph, 0x05e7 }, /* HEBREW LETTER QOF */
|
---|
728 | { XK_hebrew_resh, 0x05e8 }, /* HEBREW LETTER RESH */
|
---|
729 | { XK_hebrew_shin, 0x05e9 }, /* HEBREW LETTER SHIN */
|
---|
730 | { XK_hebrew_taw, 0x05ea }, /* HEBREW LETTER TAV */
|
---|
731 | { XK_Thai_kokai, 0x0e01 }, /* THAI CHARACTER KO KAI */
|
---|
732 | { XK_Thai_khokhai, 0x0e02 }, /* THAI CHARACTER KHO KHAI */
|
---|
733 | { XK_Thai_khokhuat, 0x0e03 }, /* THAI CHARACTER KHO KHUAT */
|
---|
734 | { XK_Thai_khokhwai, 0x0e04 }, /* THAI CHARACTER KHO KHWAI */
|
---|
735 | { XK_Thai_khokhon, 0x0e05 }, /* THAI CHARACTER KHO KHON */
|
---|
736 | { XK_Thai_khorakhang, 0x0e06 }, /* THAI CHARACTER KHO RAKHANG */
|
---|
737 | { XK_Thai_ngongu, 0x0e07 }, /* THAI CHARACTER NGO NGU */
|
---|
738 | { XK_Thai_chochan, 0x0e08 }, /* THAI CHARACTER CHO CHAN */
|
---|
739 | { XK_Thai_choching, 0x0e09 }, /* THAI CHARACTER CHO CHING */
|
---|
740 | { XK_Thai_chochang, 0x0e0a }, /* THAI CHARACTER CHO CHANG */
|
---|
741 | { XK_Thai_soso, 0x0e0b }, /* THAI CHARACTER SO SO */
|
---|
742 | { XK_Thai_chochoe, 0x0e0c }, /* THAI CHARACTER CHO CHOE */
|
---|
743 | { XK_Thai_yoying, 0x0e0d }, /* THAI CHARACTER YO YING */
|
---|
744 | { XK_Thai_dochada, 0x0e0e }, /* THAI CHARACTER DO CHADA */
|
---|
745 | { XK_Thai_topatak, 0x0e0f }, /* THAI CHARACTER TO PATAK */
|
---|
746 | { XK_Thai_thothan, 0x0e10 }, /* THAI CHARACTER THO THAN */
|
---|
747 | { XK_Thai_thonangmontho, 0x0e11 }, /* THAI CHARACTER THO NANGMONTHO */
|
---|
748 | { XK_Thai_thophuthao, 0x0e12 }, /* THAI CHARACTER THO PHUTHAO */
|
---|
749 | { XK_Thai_nonen, 0x0e13 }, /* THAI CHARACTER NO NEN */
|
---|
750 | { XK_Thai_dodek, 0x0e14 }, /* THAI CHARACTER DO DEK */
|
---|
751 | { XK_Thai_totao, 0x0e15 }, /* THAI CHARACTER TO TAO */
|
---|
752 | { XK_Thai_thothung, 0x0e16 }, /* THAI CHARACTER THO THUNG */
|
---|
753 | { XK_Thai_thothahan, 0x0e17 }, /* THAI CHARACTER THO THAHAN */
|
---|
754 | { XK_Thai_thothong, 0x0e18 }, /* THAI CHARACTER THO THONG */
|
---|
755 | { XK_Thai_nonu, 0x0e19 }, /* THAI CHARACTER NO NU */
|
---|
756 | { XK_Thai_bobaimai, 0x0e1a }, /* THAI CHARACTER BO BAIMAI */
|
---|
757 | { XK_Thai_popla, 0x0e1b }, /* THAI CHARACTER PO PLA */
|
---|
758 | { XK_Thai_phophung, 0x0e1c }, /* THAI CHARACTER PHO PHUNG */
|
---|
759 | { XK_Thai_fofa, 0x0e1d }, /* THAI CHARACTER FO FA */
|
---|
760 | { XK_Thai_phophan, 0x0e1e }, /* THAI CHARACTER PHO PHAN */
|
---|
761 | { XK_Thai_fofan, 0x0e1f }, /* THAI CHARACTER FO FAN */
|
---|
762 | { XK_Thai_phosamphao, 0x0e20 }, /* THAI CHARACTER PHO SAMPHAO */
|
---|
763 | { XK_Thai_moma, 0x0e21 }, /* THAI CHARACTER MO MA */
|
---|
764 | { XK_Thai_yoyak, 0x0e22 }, /* THAI CHARACTER YO YAK */
|
---|
765 | { XK_Thai_rorua, 0x0e23 }, /* THAI CHARACTER RO RUA */
|
---|
766 | { XK_Thai_ru, 0x0e24 }, /* THAI CHARACTER RU */
|
---|
767 | { XK_Thai_loling, 0x0e25 }, /* THAI CHARACTER LO LING */
|
---|
768 | { XK_Thai_lu, 0x0e26 }, /* THAI CHARACTER LU */
|
---|
769 | { XK_Thai_wowaen, 0x0e27 }, /* THAI CHARACTER WO WAEN */
|
---|
770 | { XK_Thai_sosala, 0x0e28 }, /* THAI CHARACTER SO SALA */
|
---|
771 | { XK_Thai_sorusi, 0x0e29 }, /* THAI CHARACTER SO RUSI */
|
---|
772 | { XK_Thai_sosua, 0x0e2a }, /* THAI CHARACTER SO SUA */
|
---|
773 | { XK_Thai_hohip, 0x0e2b }, /* THAI CHARACTER HO HIP */
|
---|
774 | { XK_Thai_lochula, 0x0e2c }, /* THAI CHARACTER LO CHULA */
|
---|
775 | { XK_Thai_oang, 0x0e2d }, /* THAI CHARACTER O ANG */
|
---|
776 | { XK_Thai_honokhuk, 0x0e2e }, /* THAI CHARACTER HO NOKHUK */
|
---|
777 | { XK_Thai_paiyannoi, 0x0e2f }, /* THAI CHARACTER PAIYANNOI */
|
---|
778 | { XK_Thai_saraa, 0x0e30 }, /* THAI CHARACTER SARA A */
|
---|
779 | { XK_Thai_maihanakat, 0x0e31 }, /* THAI CHARACTER MAI HAN-AKAT */
|
---|
780 | { XK_Thai_saraaa, 0x0e32 }, /* THAI CHARACTER SARA AA */
|
---|
781 | { XK_Thai_saraam, 0x0e33 }, /* THAI CHARACTER SARA AM */
|
---|
782 | { XK_Thai_sarai, 0x0e34 }, /* THAI CHARACTER SARA I */
|
---|
783 | { XK_Thai_saraii, 0x0e35 }, /* THAI CHARACTER SARA II */
|
---|
784 | { XK_Thai_saraue, 0x0e36 }, /* THAI CHARACTER SARA UE */
|
---|
785 | { XK_Thai_sarauee, 0x0e37 }, /* THAI CHARACTER SARA UEE */
|
---|
786 | { XK_Thai_sarau, 0x0e38 }, /* THAI CHARACTER SARA U */
|
---|
787 | { XK_Thai_sarauu, 0x0e39 }, /* THAI CHARACTER SARA UU */
|
---|
788 | { XK_Thai_phinthu, 0x0e3a }, /* THAI CHARACTER PHINTHU */
|
---|
789 | /*{ XK_Thai_maihanakat_maitho, ??? }, */
|
---|
790 | { XK_Thai_baht, 0x0e3f }, /* THAI CURRENCY SYMBOL BAHT */
|
---|
791 | { XK_Thai_sarae, 0x0e40 }, /* THAI CHARACTER SARA E */
|
---|
792 | { XK_Thai_saraae, 0x0e41 }, /* THAI CHARACTER SARA AE */
|
---|
793 | { XK_Thai_sarao, 0x0e42 }, /* THAI CHARACTER SARA O */
|
---|
794 | { XK_Thai_saraaimaimuan, 0x0e43 }, /* THAI CHARACTER SARA AI MAIMUAN */
|
---|
795 | { XK_Thai_saraaimaimalai, 0x0e44 }, /* THAI CHARACTER SARA AI MAIMALAI */
|
---|
796 | { XK_Thai_lakkhangyao, 0x0e45 }, /* THAI CHARACTER LAKKHANGYAO */
|
---|
797 | { XK_Thai_maiyamok, 0x0e46 }, /* THAI CHARACTER MAIYAMOK */
|
---|
798 | { XK_Thai_maitaikhu, 0x0e47 }, /* THAI CHARACTER MAITAIKHU */
|
---|
799 | { XK_Thai_maiek, 0x0e48 }, /* THAI CHARACTER MAI EK */
|
---|
800 | { XK_Thai_maitho, 0x0e49 }, /* THAI CHARACTER MAI THO */
|
---|
801 | { XK_Thai_maitri, 0x0e4a }, /* THAI CHARACTER MAI TRI */
|
---|
802 | { XK_Thai_maichattawa, 0x0e4b }, /* THAI CHARACTER MAI CHATTAWA */
|
---|
803 | { XK_Thai_thanthakhat, 0x0e4c }, /* THAI CHARACTER THANTHAKHAT */
|
---|
804 | { XK_Thai_nikhahit, 0x0e4d }, /* THAI CHARACTER NIKHAHIT */
|
---|
805 | { XK_Thai_leksun, 0x0e50 }, /* THAI DIGIT ZERO */
|
---|
806 | { XK_Thai_leknung, 0x0e51 }, /* THAI DIGIT ONE */
|
---|
807 | { XK_Thai_leksong, 0x0e52 }, /* THAI DIGIT TWO */
|
---|
808 | { XK_Thai_leksam, 0x0e53 }, /* THAI DIGIT THREE */
|
---|
809 | { XK_Thai_leksi, 0x0e54 }, /* THAI DIGIT FOUR */
|
---|
810 | { XK_Thai_lekha, 0x0e55 }, /* THAI DIGIT FIVE */
|
---|
811 | { XK_Thai_lekhok, 0x0e56 }, /* THAI DIGIT SIX */
|
---|
812 | { XK_Thai_lekchet, 0x0e57 }, /* THAI DIGIT SEVEN */
|
---|
813 | { XK_Thai_lekpaet, 0x0e58 }, /* THAI DIGIT EIGHT */
|
---|
814 | { XK_Thai_lekkao, 0x0e59 }, /* THAI DIGIT NINE */
|
---|
815 | { XK_Hangul_Kiyeog, 0x3131 }, /* HANGUL LETTER KIYEOK */
|
---|
816 | { XK_Hangul_SsangKiyeog, 0x3132 }, /* HANGUL LETTER SSANGKIYEOK */
|
---|
817 | { XK_Hangul_KiyeogSios, 0x3133 }, /* HANGUL LETTER KIYEOK-SIOS */
|
---|
818 | { XK_Hangul_Nieun, 0x3134 }, /* HANGUL LETTER NIEUN */
|
---|
819 | { XK_Hangul_NieunJieuj, 0x3135 }, /* HANGUL LETTER NIEUN-CIEUC */
|
---|
820 | { XK_Hangul_NieunHieuh, 0x3136 }, /* HANGUL LETTER NIEUN-HIEUH */
|
---|
821 | { XK_Hangul_Dikeud, 0x3137 }, /* HANGUL LETTER TIKEUT */
|
---|
822 | { XK_Hangul_SsangDikeud, 0x3138 }, /* HANGUL LETTER SSANGTIKEUT */
|
---|
823 | { XK_Hangul_Rieul, 0x3139 }, /* HANGUL LETTER RIEUL */
|
---|
824 | { XK_Hangul_RieulKiyeog, 0x313a }, /* HANGUL LETTER RIEUL-KIYEOK */
|
---|
825 | { XK_Hangul_RieulMieum, 0x313b }, /* HANGUL LETTER RIEUL-MIEUM */
|
---|
826 | { XK_Hangul_RieulPieub, 0x313c }, /* HANGUL LETTER RIEUL-PIEUP */
|
---|
827 | { XK_Hangul_RieulSios, 0x313d }, /* HANGUL LETTER RIEUL-SIOS */
|
---|
828 | { XK_Hangul_RieulTieut, 0x313e }, /* HANGUL LETTER RIEUL-THIEUTH */
|
---|
829 | { XK_Hangul_RieulPhieuf, 0x313f }, /* HANGUL LETTER RIEUL-PHIEUPH */
|
---|
830 | { XK_Hangul_RieulHieuh, 0x3140 }, /* HANGUL LETTER RIEUL-HIEUH */
|
---|
831 | { XK_Hangul_Mieum, 0x3141 }, /* HANGUL LETTER MIEUM */
|
---|
832 | { XK_Hangul_Pieub, 0x3142 }, /* HANGUL LETTER PIEUP */
|
---|
833 | { XK_Hangul_SsangPieub, 0x3143 }, /* HANGUL LETTER SSANGPIEUP */
|
---|
834 | { XK_Hangul_PieubSios, 0x3144 }, /* HANGUL LETTER PIEUP-SIOS */
|
---|
835 | { XK_Hangul_Sios, 0x3145 }, /* HANGUL LETTER SIOS */
|
---|
836 | { XK_Hangul_SsangSios, 0x3146 }, /* HANGUL LETTER SSANGSIOS */
|
---|
837 | { XK_Hangul_Ieung, 0x3147 }, /* HANGUL LETTER IEUNG */
|
---|
838 | { XK_Hangul_Jieuj, 0x3148 }, /* HANGUL LETTER CIEUC */
|
---|
839 | { XK_Hangul_SsangJieuj, 0x3149 }, /* HANGUL LETTER SSANGCIEUC */
|
---|
840 | { XK_Hangul_Cieuc, 0x314a }, /* HANGUL LETTER CHIEUCH */
|
---|
841 | { XK_Hangul_Khieuq, 0x314b }, /* HANGUL LETTER KHIEUKH */
|
---|
842 | { XK_Hangul_Tieut, 0x314c }, /* HANGUL LETTER THIEUTH */
|
---|
843 | { XK_Hangul_Phieuf, 0x314d }, /* HANGUL LETTER PHIEUPH */
|
---|
844 | { XK_Hangul_Hieuh, 0x314e }, /* HANGUL LETTER HIEUH */
|
---|
845 | { XK_Hangul_A, 0x314f }, /* HANGUL LETTER A */
|
---|
846 | { XK_Hangul_AE, 0x3150 }, /* HANGUL LETTER AE */
|
---|
847 | { XK_Hangul_YA, 0x3151 }, /* HANGUL LETTER YA */
|
---|
848 | { XK_Hangul_YAE, 0x3152 }, /* HANGUL LETTER YAE */
|
---|
849 | { XK_Hangul_EO, 0x3153 }, /* HANGUL LETTER EO */
|
---|
850 | { XK_Hangul_E, 0x3154 }, /* HANGUL LETTER E */
|
---|
851 | { XK_Hangul_YEO, 0x3155 }, /* HANGUL LETTER YEO */
|
---|
852 | { XK_Hangul_YE, 0x3156 }, /* HANGUL LETTER YE */
|
---|
853 | { XK_Hangul_O, 0x3157 }, /* HANGUL LETTER O */
|
---|
854 | { XK_Hangul_WA, 0x3158 }, /* HANGUL LETTER WA */
|
---|
855 | { XK_Hangul_WAE, 0x3159 }, /* HANGUL LETTER WAE */
|
---|
856 | { XK_Hangul_OE, 0x315a }, /* HANGUL LETTER OE */
|
---|
857 | { XK_Hangul_YO, 0x315b }, /* HANGUL LETTER YO */
|
---|
858 | { XK_Hangul_U, 0x315c }, /* HANGUL LETTER U */
|
---|
859 | { XK_Hangul_WEO, 0x315d }, /* HANGUL LETTER WEO */
|
---|
860 | { XK_Hangul_WE, 0x315e }, /* HANGUL LETTER WE */
|
---|
861 | { XK_Hangul_WI, 0x315f }, /* HANGUL LETTER WI */
|
---|
862 | { XK_Hangul_YU, 0x3160 }, /* HANGUL LETTER YU */
|
---|
863 | { XK_Hangul_EU, 0x3161 }, /* HANGUL LETTER EU */
|
---|
864 | { XK_Hangul_YI, 0x3162 }, /* HANGUL LETTER YI */
|
---|
865 | { XK_Hangul_I, 0x3163 }, /* HANGUL LETTER I */
|
---|
866 | { XK_Hangul_J_Kiyeog, 0x11a8 }, /* HANGUL JONGSEONG KIYEOK */
|
---|
867 | { XK_Hangul_J_SsangKiyeog, 0x11a9 }, /* HANGUL JONGSEONG SSANGKIYEOK */
|
---|
868 | { XK_Hangul_J_KiyeogSios, 0x11aa }, /* HANGUL JONGSEONG KIYEOK-SIOS */
|
---|
869 | { XK_Hangul_J_Nieun, 0x11ab }, /* HANGUL JONGSEONG NIEUN */
|
---|
870 | { XK_Hangul_J_NieunJieuj, 0x11ac }, /* HANGUL JONGSEONG NIEUN-CIEUC */
|
---|
871 | { XK_Hangul_J_NieunHieuh, 0x11ad }, /* HANGUL JONGSEONG NIEUN-HIEUH */
|
---|
872 | { XK_Hangul_J_Dikeud, 0x11ae }, /* HANGUL JONGSEONG TIKEUT */
|
---|
873 | { XK_Hangul_J_Rieul, 0x11af }, /* HANGUL JONGSEONG RIEUL */
|
---|
874 | { XK_Hangul_J_RieulKiyeog, 0x11b0 }, /* HANGUL JONGSEONG RIEUL-KIYEOK */
|
---|
875 | { XK_Hangul_J_RieulMieum, 0x11b1 }, /* HANGUL JONGSEONG RIEUL-MIEUM */
|
---|
876 | { XK_Hangul_J_RieulPieub, 0x11b2 }, /* HANGUL JONGSEONG RIEUL-PIEUP */
|
---|
877 | { XK_Hangul_J_RieulSios, 0x11b3 }, /* HANGUL JONGSEONG RIEUL-SIOS */
|
---|
878 | { XK_Hangul_J_RieulTieut, 0x11b4 }, /* HANGUL JONGSEONG RIEUL-THIEUTH */
|
---|
879 | { XK_Hangul_J_RieulPhieuf, 0x11b5 }, /* HANGUL JONGSEONG RIEUL-PHIEUPH */
|
---|
880 | { XK_Hangul_J_RieulHieuh, 0x11b6 }, /* HANGUL JONGSEONG RIEUL-HIEUH */
|
---|
881 | { XK_Hangul_J_Mieum, 0x11b7 }, /* HANGUL JONGSEONG MIEUM */
|
---|
882 | { XK_Hangul_J_Pieub, 0x11b8 }, /* HANGUL JONGSEONG PIEUP */
|
---|
883 | { XK_Hangul_J_PieubSios, 0x11b9 }, /* HANGUL JONGSEONG PIEUP-SIOS */
|
---|
884 | { XK_Hangul_J_Sios, 0x11ba }, /* HANGUL JONGSEONG SIOS */
|
---|
885 | { XK_Hangul_J_SsangSios, 0x11bb }, /* HANGUL JONGSEONG SSANGSIOS */
|
---|
886 | { XK_Hangul_J_Ieung, 0x11bc }, /* HANGUL JONGSEONG IEUNG */
|
---|
887 | { XK_Hangul_J_Jieuj, 0x11bd }, /* HANGUL JONGSEONG CIEUC */
|
---|
888 | { XK_Hangul_J_Cieuc, 0x11be }, /* HANGUL JONGSEONG CHIEUCH */
|
---|
889 | { XK_Hangul_J_Khieuq, 0x11bf }, /* HANGUL JONGSEONG KHIEUKH */
|
---|
890 | { XK_Hangul_J_Tieut, 0x11c0 }, /* HANGUL JONGSEONG THIEUTH */
|
---|
891 | { XK_Hangul_J_Phieuf, 0x11c1 }, /* HANGUL JONGSEONG PHIEUPH */
|
---|
892 | { XK_Hangul_J_Hieuh, 0x11c2 }, /* HANGUL JONGSEONG HIEUH */
|
---|
893 | { XK_Hangul_RieulYeorinHieuh, 0x316d }, /* HANGUL LETTER RIEUL-YEORINHIEUH */
|
---|
894 | { XK_Hangul_SunkyeongeumMieum, 0x3171 }, /* HANGUL LETTER KAPYEOUNMIEUM */
|
---|
895 | { XK_Hangul_SunkyeongeumPieub, 0x3178 }, /* HANGUL LETTER KAPYEOUNPIEUP */
|
---|
896 | { XK_Hangul_PanSios, 0x317f }, /* HANGUL LETTER PANSIOS */
|
---|
897 | { XK_Hangul_KkogjiDalrinIeung, 0x3181 }, /* HANGUL LETTER YESIEUNG */
|
---|
898 | { XK_Hangul_SunkyeongeumPhieuf, 0x3184 }, /* HANGUL LETTER KAPYEOUNPHIEUPH */
|
---|
899 | { XK_Hangul_YeorinHieuh, 0x3186 }, /* HANGUL LETTER YEORINHIEUH */
|
---|
900 | { XK_Hangul_AraeA, 0x318d }, /* HANGUL LETTER ARAEA */
|
---|
901 | { XK_Hangul_AraeAE, 0x318e }, /* HANGUL LETTER ARAEAE */
|
---|
902 | { XK_Hangul_J_PanSios, 0x11eb }, /* HANGUL JONGSEONG PANSIOS */
|
---|
903 | { XK_Hangul_J_KkogjiDalrinIeung, 0x11f0 }, /* HANGUL JONGSEONG YESIEUNG */
|
---|
904 | { XK_Hangul_J_YeorinHieuh, 0x11f9 }, /* HANGUL JONGSEONG YEORINHIEUH */
|
---|
905 | { XK_Korean_Won, 0x20a9 }, /* WON SIGN */
|
---|
906 | { XK_OE, 0x0152 }, /* LATIN CAPITAL LIGATURE OE */
|
---|
907 | { XK_oe, 0x0153 }, /* LATIN SMALL LIGATURE OE */
|
---|
908 | { XK_Ydiaeresis, 0x0178 }, /* LATIN CAPITAL LETTER Y WITH DIAERESIS */
|
---|
909 | { XK_EuroSign, 0x20ac }, /* EURO SIGN */
|
---|
910 |
|
---|
911 | /* combining dead keys */
|
---|
912 | { XK_dead_abovedot, 0x0307 }, /* COMBINING DOT ABOVE */
|
---|
913 | { XK_dead_abovering, 0x030a }, /* COMBINING RING ABOVE */
|
---|
914 | { XK_dead_acute, 0x0301 }, /* COMBINING ACUTE ACCENT */
|
---|
915 | { XK_dead_breve, 0x0306 }, /* COMBINING BREVE */
|
---|
916 | { XK_dead_caron, 0x030c }, /* COMBINING CARON */
|
---|
917 | { XK_dead_cedilla, 0x0327 }, /* COMBINING CEDILLA */
|
---|
918 | { XK_dead_circumflex, 0x0302 }, /* COMBINING CIRCUMFLEX ACCENT */
|
---|
919 | { XK_dead_diaeresis, 0x0308 }, /* COMBINING DIAERESIS */
|
---|
920 | { XK_dead_doubleacute, 0x030b }, /* COMBINING DOUBLE ACUTE ACCENT */
|
---|
921 | { XK_dead_grave, 0x0300 }, /* COMBINING GRAVE ACCENT */
|
---|
922 | { XK_dead_macron, 0x0304 }, /* COMBINING MACRON */
|
---|
923 | { XK_dead_ogonek, 0x0328 }, /* COMBINING OGONEK */
|
---|
924 | { XK_dead_tilde, 0x0303 } /* COMBINING TILDE */
|
---|
925 | };
|
---|
926 | /* XXX -- map these too
|
---|
927 | XK_Cyrillic_GHE_bar
|
---|
928 | XK_Cyrillic_ZHE_descender
|
---|
929 | XK_Cyrillic_KA_descender
|
---|
930 | XK_Cyrillic_KA_vertstroke
|
---|
931 | XK_Cyrillic_EN_descender
|
---|
932 | XK_Cyrillic_U_straight
|
---|
933 | XK_Cyrillic_U_straight_bar
|
---|
934 | XK_Cyrillic_HA_descender
|
---|
935 | XK_Cyrillic_CHE_descender
|
---|
936 | XK_Cyrillic_CHE_vertstroke
|
---|
937 | XK_Cyrillic_SHHA
|
---|
938 | XK_Cyrillic_SCHWA
|
---|
939 | XK_Cyrillic_I_macron
|
---|
940 | XK_Cyrillic_O_bar
|
---|
941 | XK_Cyrillic_U_macron
|
---|
942 | XK_Cyrillic_ghe_bar
|
---|
943 | XK_Cyrillic_zhe_descender
|
---|
944 | XK_Cyrillic_ka_descender
|
---|
945 | XK_Cyrillic_ka_vertstroke
|
---|
946 | XK_Cyrillic_en_descender
|
---|
947 | XK_Cyrillic_u_straight
|
---|
948 | XK_Cyrillic_u_straight_bar
|
---|
949 | XK_Cyrillic_ha_descender
|
---|
950 | XK_Cyrillic_che_descender
|
---|
951 | XK_Cyrillic_che_vertstroke
|
---|
952 | XK_Cyrillic_shha
|
---|
953 | XK_Cyrillic_schwa
|
---|
954 | XK_Cyrillic_i_macron
|
---|
955 | XK_Cyrillic_o_bar
|
---|
956 | XK_Cyrillic_u_macron
|
---|
957 |
|
---|
958 | XK_Armenian_eternity
|
---|
959 | XK_Armenian_ligature_ew
|
---|
960 | XK_Armenian_full_stop
|
---|
961 | XK_Armenian_verjaket
|
---|
962 | XK_Armenian_parenright
|
---|
963 | XK_Armenian_parenleft
|
---|
964 | XK_Armenian_guillemotright
|
---|
965 | XK_Armenian_guillemotleft
|
---|
966 | XK_Armenian_em_dash
|
---|
967 | XK_Armenian_dot
|
---|
968 | XK_Armenian_mijaket
|
---|
969 | XK_Armenian_but
|
---|
970 | XK_Armenian_separation_mark
|
---|
971 | XK_Armenian_comma
|
---|
972 | XK_Armenian_en_dash
|
---|
973 | XK_Armenian_hyphen
|
---|
974 | XK_Armenian_yentamna
|
---|
975 | XK_Armenian_ellipsis
|
---|
976 | XK_Armenian_amanak
|
---|
977 | XK_Armenian_exclam
|
---|
978 | XK_Armenian_accent
|
---|
979 | XK_Armenian_shesht
|
---|
980 | XK_Armenian_paruyk
|
---|
981 | XK_Armenian_question
|
---|
982 | XK_Armenian_AYB
|
---|
983 | XK_Armenian_ayb
|
---|
984 | XK_Armenian_BEN
|
---|
985 | XK_Armenian_ben
|
---|
986 | XK_Armenian_GIM
|
---|
987 | XK_Armenian_gim
|
---|
988 | XK_Armenian_DA
|
---|
989 | XK_Armenian_da
|
---|
990 | XK_Armenian_YECH
|
---|
991 | XK_Armenian_yech
|
---|
992 | XK_Armenian_ZA
|
---|
993 | XK_Armenian_za
|
---|
994 | XK_Armenian_E
|
---|
995 | XK_Armenian_e
|
---|
996 | XK_Armenian_AT
|
---|
997 | XK_Armenian_at
|
---|
998 | XK_Armenian_TO
|
---|
999 | XK_Armenian_to
|
---|
1000 | XK_Armenian_ZHE
|
---|
1001 | XK_Armenian_zhe
|
---|
1002 | XK_Armenian_INI
|
---|
1003 | XK_Armenian_ini
|
---|
1004 | XK_Armenian_LYUN
|
---|
1005 | XK_Armenian_lyun
|
---|
1006 | XK_Armenian_KHE
|
---|
1007 | XK_Armenian_khe
|
---|
1008 | XK_Armenian_TSA
|
---|
1009 | XK_Armenian_tsa
|
---|
1010 | XK_Armenian_KEN
|
---|
1011 | XK_Armenian_ken
|
---|
1012 | XK_Armenian_HO
|
---|
1013 | XK_Armenian_ho
|
---|
1014 | XK_Armenian_DZA
|
---|
1015 | XK_Armenian_dza
|
---|
1016 | XK_Armenian_GHAT
|
---|
1017 | XK_Armenian_ghat
|
---|
1018 | XK_Armenian_TCHE
|
---|
1019 | XK_Armenian_tche
|
---|
1020 | XK_Armenian_MEN
|
---|
1021 | XK_Armenian_men
|
---|
1022 | XK_Armenian_HI
|
---|
1023 | XK_Armenian_hi
|
---|
1024 | XK_Armenian_NU
|
---|
1025 | XK_Armenian_nu
|
---|
1026 | XK_Armenian_SHA
|
---|
1027 | XK_Armenian_sha
|
---|
1028 | XK_Armenian_VO
|
---|
1029 | XK_Armenian_vo
|
---|
1030 | XK_Armenian_CHA
|
---|
1031 | XK_Armenian_cha
|
---|
1032 | XK_Armenian_PE
|
---|
1033 | XK_Armenian_pe
|
---|
1034 | XK_Armenian_JE
|
---|
1035 | XK_Armenian_je
|
---|
1036 | XK_Armenian_RA
|
---|
1037 | XK_Armenian_ra
|
---|
1038 | XK_Armenian_SE
|
---|
1039 | XK_Armenian_se
|
---|
1040 | XK_Armenian_VEV
|
---|
1041 | XK_Armenian_vev
|
---|
1042 | XK_Armenian_TYUN
|
---|
1043 | XK_Armenian_tyun
|
---|
1044 | XK_Armenian_RE
|
---|
1045 | XK_Armenian_re
|
---|
1046 | XK_Armenian_TSO
|
---|
1047 | XK_Armenian_tso
|
---|
1048 | XK_Armenian_VYUN
|
---|
1049 | XK_Armenian_vyun
|
---|
1050 | XK_Armenian_PYUR
|
---|
1051 | XK_Armenian_pyur
|
---|
1052 | XK_Armenian_KE
|
---|
1053 | XK_Armenian_ke
|
---|
1054 | XK_Armenian_O
|
---|
1055 | XK_Armenian_o
|
---|
1056 | XK_Armenian_FE
|
---|
1057 | XK_Armenian_fe
|
---|
1058 | XK_Armenian_apostrophe
|
---|
1059 | XK_Armenian_section_sign
|
---|
1060 |
|
---|
1061 | XK_Georgian_an
|
---|
1062 | XK_Georgian_ban
|
---|
1063 | XK_Georgian_gan
|
---|
1064 | XK_Georgian_don
|
---|
1065 | XK_Georgian_en
|
---|
1066 | XK_Georgian_vin
|
---|
1067 | XK_Georgian_zen
|
---|
1068 | XK_Georgian_tan
|
---|
1069 | XK_Georgian_in
|
---|
1070 | XK_Georgian_kan
|
---|
1071 | XK_Georgian_las
|
---|
1072 | XK_Georgian_man
|
---|
1073 | XK_Georgian_nar
|
---|
1074 | XK_Georgian_on
|
---|
1075 | XK_Georgian_par
|
---|
1076 | XK_Georgian_zhar
|
---|
1077 | XK_Georgian_rae
|
---|
1078 | XK_Georgian_san
|
---|
1079 | XK_Georgian_tar
|
---|
1080 | XK_Georgian_un
|
---|
1081 | XK_Georgian_phar
|
---|
1082 | XK_Georgian_khar
|
---|
1083 | XK_Georgian_ghan
|
---|
1084 | XK_Georgian_qar
|
---|
1085 | XK_Georgian_shin
|
---|
1086 | XK_Georgian_chin
|
---|
1087 | XK_Georgian_can
|
---|
1088 | XK_Georgian_jil
|
---|
1089 | XK_Georgian_cil
|
---|
1090 | XK_Georgian_char
|
---|
1091 | XK_Georgian_xan
|
---|
1092 | XK_Georgian_jhan
|
---|
1093 | XK_Georgian_hae
|
---|
1094 | XK_Georgian_he
|
---|
1095 | XK_Georgian_hie
|
---|
1096 | XK_Georgian_we
|
---|
1097 | XK_Georgian_har
|
---|
1098 | XK_Georgian_hoe
|
---|
1099 | XK_Georgian_fi
|
---|
1100 |
|
---|
1101 | XK_Ccedillaabovedot
|
---|
1102 | XK_Xabovedot
|
---|
1103 | XK_Qabovedot
|
---|
1104 | XK_Ibreve
|
---|
1105 | XK_IE
|
---|
1106 | XK_UO
|
---|
1107 | XK_Zstroke
|
---|
1108 | XK_Gcaron
|
---|
1109 | XK_Obarred
|
---|
1110 | XK_ccedillaabovedot
|
---|
1111 | XK_xabovedot
|
---|
1112 | XK_Ocaron
|
---|
1113 | XK_qabovedot
|
---|
1114 | XK_ibreve
|
---|
1115 | XK_ie
|
---|
1116 | XK_uo
|
---|
1117 | XK_zstroke
|
---|
1118 | XK_gcaron
|
---|
1119 | XK_ocaron
|
---|
1120 | XK_obarred
|
---|
1121 | XK_SCHWA
|
---|
1122 | XK_Lbelowdot
|
---|
1123 | XK_Lstrokebelowdot
|
---|
1124 | XK_Gtilde
|
---|
1125 | XK_lbelowdot
|
---|
1126 | XK_lstrokebelowdot
|
---|
1127 | XK_gtilde
|
---|
1128 | XK_schwa
|
---|
1129 |
|
---|
1130 | XK_Abelowdot
|
---|
1131 | XK_abelowdot
|
---|
1132 | XK_Ahook
|
---|
1133 | XK_ahook
|
---|
1134 | XK_Acircumflexacute
|
---|
1135 | XK_acircumflexacute
|
---|
1136 | XK_Acircumflexgrave
|
---|
1137 | XK_acircumflexgrave
|
---|
1138 | XK_Acircumflexhook
|
---|
1139 | XK_acircumflexhook
|
---|
1140 | XK_Acircumflextilde
|
---|
1141 | XK_acircumflextilde
|
---|
1142 | XK_Acircumflexbelowdot
|
---|
1143 | XK_acircumflexbelowdot
|
---|
1144 | XK_Abreveacute
|
---|
1145 | XK_abreveacute
|
---|
1146 | XK_Abrevegrave
|
---|
1147 | XK_abrevegrave
|
---|
1148 | XK_Abrevehook
|
---|
1149 | XK_abrevehook
|
---|
1150 | XK_Abrevetilde
|
---|
1151 | XK_abrevetilde
|
---|
1152 | XK_Abrevebelowdot
|
---|
1153 | XK_abrevebelowdot
|
---|
1154 | XK_Ebelowdot
|
---|
1155 | XK_ebelowdot
|
---|
1156 | XK_Ehook
|
---|
1157 | XK_ehook
|
---|
1158 | XK_Etilde
|
---|
1159 | XK_etilde
|
---|
1160 | XK_Ecircumflexacute
|
---|
1161 | XK_ecircumflexacute
|
---|
1162 | XK_Ecircumflexgrave
|
---|
1163 | XK_ecircumflexgrave
|
---|
1164 | XK_Ecircumflexhook
|
---|
1165 | XK_ecircumflexhook
|
---|
1166 | XK_Ecircumflextilde
|
---|
1167 | XK_ecircumflextilde
|
---|
1168 | XK_Ecircumflexbelowdot
|
---|
1169 | XK_ecircumflexbelowdot
|
---|
1170 | XK_Ihook
|
---|
1171 | XK_ihook
|
---|
1172 | XK_Ibelowdot
|
---|
1173 | XK_ibelowdot
|
---|
1174 | XK_Obelowdot
|
---|
1175 | XK_obelowdot
|
---|
1176 | XK_Ohook
|
---|
1177 | XK_ohook
|
---|
1178 | XK_Ocircumflexacute
|
---|
1179 | XK_ocircumflexacute
|
---|
1180 | XK_Ocircumflexgrave
|
---|
1181 | XK_ocircumflexgrave
|
---|
1182 | XK_Ocircumflexhook
|
---|
1183 | XK_ocircumflexhook
|
---|
1184 | XK_Ocircumflextilde
|
---|
1185 | XK_ocircumflextilde
|
---|
1186 | XK_Ocircumflexbelowdot
|
---|
1187 | XK_ocircumflexbelowdot
|
---|
1188 | XK_Ohornacute
|
---|
1189 | XK_ohornacute
|
---|
1190 | XK_Ohorngrave
|
---|
1191 | XK_ohorngrave
|
---|
1192 | XK_Ohornhook
|
---|
1193 | XK_ohornhook
|
---|
1194 | XK_Ohorntilde
|
---|
1195 | XK_ohorntilde
|
---|
1196 | XK_Ohornbelowdot
|
---|
1197 | XK_ohornbelowdot
|
---|
1198 | XK_Ubelowdot
|
---|
1199 | XK_ubelowdot
|
---|
1200 | XK_Uhook
|
---|
1201 | XK_uhook
|
---|
1202 | XK_Uhornacute
|
---|
1203 | XK_uhornacute
|
---|
1204 | XK_Uhorngrave
|
---|
1205 | XK_uhorngrave
|
---|
1206 | XK_Uhornhook
|
---|
1207 | XK_uhornhook
|
---|
1208 | XK_Uhorntilde
|
---|
1209 | XK_uhorntilde
|
---|
1210 | XK_Uhornbelowdot
|
---|
1211 | XK_uhornbelowdot
|
---|
1212 | XK_Ybelowdot
|
---|
1213 | XK_ybelowdot
|
---|
1214 | XK_Yhook
|
---|
1215 | XK_yhook
|
---|
1216 | XK_Ytilde
|
---|
1217 | XK_ytilde
|
---|
1218 | XK_Ohorn
|
---|
1219 | XK_ohorn
|
---|
1220 | XK_Uhorn
|
---|
1221 | XK_uhorn
|
---|
1222 | */
|
---|
1223 |
|
---|
1224 | // map "Internet" keys to KeyIDs
|
---|
1225 | static const KeySym s_map1008FF[] =
|
---|
1226 | {
|
---|
1227 | /* 0x00 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1228 | /* 0x08 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1229 | /* 0x10 */ 0, kKeyAudioDown, kKeyAudioMute, kKeyAudioUp,
|
---|
1230 | /* 0x14 */ kKeyAudioPlay, kKeyAudioStop, kKeyAudioPrev, kKeyAudioNext,
|
---|
1231 | /* 0x18 */ kKeyWWWHome, kKeyAppMail, 0, kKeyWWWSearch, 0, 0, 0, 0,
|
---|
1232 | /* 0x20 */ 0, 0, 0, 0, 0, 0, kKeyWWWBack, kKeyWWWForward,
|
---|
1233 | /* 0x28 */ kKeyWWWStop, kKeyWWWRefresh, 0, 0, kKeyEject, 0, 0, 0,
|
---|
1234 | /* 0x30 */ kKeyWWWFavorites, 0, kKeyAppMedia, 0, 0, 0, 0, 0,
|
---|
1235 | /* 0x38 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1236 | /* 0x40 */ kKeyAppUser1, kKeyAppUser2, 0, 0, 0, 0, 0, 0,
|
---|
1237 | /* 0x48 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1238 | /* 0x50 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1239 | /* 0x58 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1240 | /* 0x60 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1241 | /* 0x68 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1242 | /* 0x70 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1243 | /* 0x78 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1244 | /* 0x80 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1245 | /* 0x88 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1246 | /* 0x90 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1247 | /* 0x98 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1248 | /* 0xa0 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1249 | /* 0xa8 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1250 | /* 0xb0 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1251 | /* 0xb8 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1252 | /* 0xc0 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1253 | /* 0xc8 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1254 | /* 0xd0 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1255 | /* 0xd8 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1256 | /* 0xe0 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1257 | /* 0xe8 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1258 | /* 0xf0 */ 0, 0, 0, 0, 0, 0, 0, 0,
|
---|
1259 | /* 0xf8 */ 0, 0, 0, 0, 0, 0, 0, 0
|
---|
1260 | };
|
---|
1261 |
|
---|
1262 |
|
---|
1263 | //
|
---|
1264 | // CXWindowsUtil
|
---|
1265 | //
|
---|
1266 |
|
---|
1267 | CXWindowsUtil::CKeySymMap CXWindowsUtil::s_keySymToUCS4;
|
---|
1268 |
|
---|
1269 | bool
|
---|
1270 | CXWindowsUtil::getWindowProperty(Display* display, Window window,
|
---|
1271 | Atom property, CString* data, Atom* type,
|
---|
1272 | SInt32* format, bool deleteProperty)
|
---|
1273 | {
|
---|
1274 | assert(display != NULL);
|
---|
1275 |
|
---|
1276 | Atom actualType;
|
---|
1277 | int actualDatumSize;
|
---|
1278 |
|
---|
1279 | // ignore errors. XGetWindowProperty() will report failure.
|
---|
1280 | CXWindowsUtil::CErrorLock lock(display);
|
---|
1281 |
|
---|
1282 | // read the property
|
---|
1283 | bool okay = true;
|
---|
1284 | const long length = XMaxRequestSize(display);
|
---|
1285 | long offset = 0;
|
---|
1286 | unsigned long bytesLeft = 1;
|
---|
1287 | while (bytesLeft != 0) {
|
---|
1288 | // get more data
|
---|
1289 | unsigned long numItems;
|
---|
1290 | unsigned char* rawData;
|
---|
1291 | if (XGetWindowProperty(display, window, property,
|
---|
1292 | offset, length, False, AnyPropertyType,
|
---|
1293 | &actualType, &actualDatumSize,
|
---|
1294 | &numItems, &bytesLeft, &rawData) != Success ||
|
---|
1295 | actualType == None || actualDatumSize == 0) {
|
---|
1296 | // failed
|
---|
1297 | okay = false;
|
---|
1298 | break;
|
---|
1299 | }
|
---|
1300 |
|
---|
1301 | // compute bytes read and advance offset
|
---|
1302 | unsigned long numBytes;
|
---|
1303 | switch (actualDatumSize) {
|
---|
1304 | case 8:
|
---|
1305 | default:
|
---|
1306 | numBytes = numItems;
|
---|
1307 | offset += numItems / 4;
|
---|
1308 | break;
|
---|
1309 |
|
---|
1310 | case 16:
|
---|
1311 | numBytes = 2 * numItems;
|
---|
1312 | offset += numItems / 2;
|
---|
1313 | break;
|
---|
1314 |
|
---|
1315 | case 32:
|
---|
1316 | numBytes = 4 * numItems;
|
---|
1317 | offset += numItems;
|
---|
1318 | break;
|
---|
1319 | }
|
---|
1320 |
|
---|
1321 | // append data
|
---|
1322 | if (data != NULL) {
|
---|
1323 | data->append((char*)rawData, numBytes);
|
---|
1324 | }
|
---|
1325 | else {
|
---|
1326 | // data is not required so don't try to get any more
|
---|
1327 | bytesLeft = 0;
|
---|
1328 | }
|
---|
1329 |
|
---|
1330 | // done with returned data
|
---|
1331 | XFree(rawData);
|
---|
1332 | }
|
---|
1333 |
|
---|
1334 | // delete the property if requested
|
---|
1335 | if (deleteProperty) {
|
---|
1336 | XDeleteProperty(display, window, property);
|
---|
1337 | }
|
---|
1338 |
|
---|
1339 | // save property info
|
---|
1340 | if (type != NULL) {
|
---|
1341 | *type = actualType;
|
---|
1342 | }
|
---|
1343 | if (format != NULL) {
|
---|
1344 | *format = static_cast<SInt32>(actualDatumSize);
|
---|
1345 | }
|
---|
1346 |
|
---|
1347 | if (okay) {
|
---|
1348 | LOG((CLOG_DEBUG2 "read property %d on window 0x%08x: bytes=%d", property, window, (data == NULL) ? 0 : data->size()));
|
---|
1349 | return true;
|
---|
1350 | }
|
---|
1351 | else {
|
---|
1352 | LOG((CLOG_DEBUG2 "can't read property %d on window 0x%08x", property, window));
|
---|
1353 | return false;
|
---|
1354 | }
|
---|
1355 | }
|
---|
1356 |
|
---|
1357 | bool
|
---|
1358 | CXWindowsUtil::setWindowProperty(Display* display, Window window,
|
---|
1359 | Atom property, const void* vdata, UInt32 size,
|
---|
1360 | Atom type, SInt32 format)
|
---|
1361 | {
|
---|
1362 | const UInt32 length = 4 * XMaxRequestSize(display);
|
---|
1363 | const unsigned char* data = reinterpret_cast<const unsigned char*>(vdata);
|
---|
1364 | const UInt32 datumSize = static_cast<UInt32>(format / 8);
|
---|
1365 |
|
---|
1366 | // save errors
|
---|
1367 | bool error = false;
|
---|
1368 | CXWindowsUtil::CErrorLock lock(display, &error);
|
---|
1369 |
|
---|
1370 | // how much data to send in first chunk?
|
---|
1371 | UInt32 chunkSize = size;
|
---|
1372 | if (chunkSize > length) {
|
---|
1373 | chunkSize = length;
|
---|
1374 | }
|
---|
1375 |
|
---|
1376 | // send first chunk
|
---|
1377 | XChangeProperty(display, window, property,
|
---|
1378 | type, format, PropModeReplace,
|
---|
1379 | data, chunkSize / datumSize);
|
---|
1380 |
|
---|
1381 | // append remaining chunks
|
---|
1382 | data += chunkSize;
|
---|
1383 | size -= chunkSize;
|
---|
1384 | while (!error && size > 0) {
|
---|
1385 | chunkSize = size;
|
---|
1386 | if (chunkSize > length) {
|
---|
1387 | chunkSize = length;
|
---|
1388 | }
|
---|
1389 | XChangeProperty(display, window, property,
|
---|
1390 | type, format, PropModeAppend,
|
---|
1391 | data, chunkSize / datumSize);
|
---|
1392 | data += chunkSize;
|
---|
1393 | size -= chunkSize;
|
---|
1394 | }
|
---|
1395 |
|
---|
1396 | return !error;
|
---|
1397 | }
|
---|
1398 |
|
---|
1399 | Time
|
---|
1400 | CXWindowsUtil::getCurrentTime(Display* display, Window window)
|
---|
1401 | {
|
---|
1402 | // select property events on window
|
---|
1403 | XWindowAttributes attr;
|
---|
1404 | XGetWindowAttributes(display, window, &attr);
|
---|
1405 | XSelectInput(display, window, attr.your_event_mask | PropertyChangeMask);
|
---|
1406 |
|
---|
1407 | // make a property name to receive dummy change
|
---|
1408 | Atom atom = XInternAtom(display, "TIMESTAMP", False);
|
---|
1409 |
|
---|
1410 | // do a zero-length append to get the current time
|
---|
1411 | unsigned char dummy;
|
---|
1412 | XChangeProperty(display, window, atom,
|
---|
1413 | XA_INTEGER, 8,
|
---|
1414 | PropModeAppend,
|
---|
1415 | &dummy, 0);
|
---|
1416 |
|
---|
1417 | // look for property notify events with the following
|
---|
1418 | CPropertyNotifyPredicateInfo filter;
|
---|
1419 | filter.m_window = window;
|
---|
1420 | filter.m_property = atom;
|
---|
1421 |
|
---|
1422 | // wait for reply
|
---|
1423 | XEvent xevent;
|
---|
1424 | XIfEvent(display, &xevent, &CXWindowsUtil::propertyNotifyPredicate,
|
---|
1425 | (XPointer)&filter);
|
---|
1426 | assert(xevent.type == PropertyNotify);
|
---|
1427 | assert(xevent.xproperty.window == window);
|
---|
1428 | assert(xevent.xproperty.atom == atom);
|
---|
1429 |
|
---|
1430 | // restore event mask
|
---|
1431 | XSelectInput(display, window, attr.your_event_mask);
|
---|
1432 |
|
---|
1433 | return xevent.xproperty.time;
|
---|
1434 | }
|
---|
1435 |
|
---|
1436 | KeyID
|
---|
1437 | CXWindowsUtil::mapKeySymToKeyID(KeySym k)
|
---|
1438 | {
|
---|
1439 | initKeyMaps();
|
---|
1440 |
|
---|
1441 | switch (k & 0xffffff00) {
|
---|
1442 | case 0x0000:
|
---|
1443 | // Latin-1
|
---|
1444 | return static_cast<KeyID>(k);
|
---|
1445 |
|
---|
1446 | case 0xfe00:
|
---|
1447 | // ISO 9995 Function and Modifier Keys
|
---|
1448 | switch (k) {
|
---|
1449 | case XK_ISO_Left_Tab:
|
---|
1450 | return kKeyLeftTab;
|
---|
1451 |
|
---|
1452 | case XK_ISO_Level3_Shift:
|
---|
1453 | return kKeyAltGr;
|
---|
1454 |
|
---|
1455 | case XK_ISO_Next_Group:
|
---|
1456 | return kKeyNextGroup;
|
---|
1457 |
|
---|
1458 | case XK_ISO_Prev_Group:
|
---|
1459 | return kKeyPrevGroup;
|
---|
1460 |
|
---|
1461 | case XK_dead_grave:
|
---|
1462 | return kKeyDeadGrave;
|
---|
1463 |
|
---|
1464 | case XK_dead_acute:
|
---|
1465 | return kKeyDeadAcute;
|
---|
1466 |
|
---|
1467 | case XK_dead_circumflex:
|
---|
1468 | return kKeyDeadCircumflex;
|
---|
1469 |
|
---|
1470 | case XK_dead_tilde:
|
---|
1471 | return kKeyDeadTilde;
|
---|
1472 |
|
---|
1473 | case XK_dead_macron:
|
---|
1474 | return kKeyDeadMacron;
|
---|
1475 |
|
---|
1476 | case XK_dead_breve:
|
---|
1477 | return kKeyDeadBreve;
|
---|
1478 |
|
---|
1479 | case XK_dead_abovedot:
|
---|
1480 | return kKeyDeadAbovedot;
|
---|
1481 |
|
---|
1482 | case XK_dead_diaeresis:
|
---|
1483 | return kKeyDeadDiaeresis;
|
---|
1484 |
|
---|
1485 | case XK_dead_abovering:
|
---|
1486 | return kKeyDeadAbovering;
|
---|
1487 |
|
---|
1488 | case XK_dead_doubleacute:
|
---|
1489 | return kKeyDeadDoubleacute;
|
---|
1490 |
|
---|
1491 | case XK_dead_caron:
|
---|
1492 | return kKeyDeadCaron;
|
---|
1493 |
|
---|
1494 | case XK_dead_cedilla:
|
---|
1495 | return kKeyDeadCedilla;
|
---|
1496 |
|
---|
1497 | case XK_dead_ogonek:
|
---|
1498 | return kKeyDeadOgonek;
|
---|
1499 |
|
---|
1500 | default:
|
---|
1501 | return kKeyNone;
|
---|
1502 | }
|
---|
1503 |
|
---|
1504 | case 0xff00:
|
---|
1505 | // MISCELLANY
|
---|
1506 | return static_cast<KeyID>(k - 0xff00 + 0xef00);
|
---|
1507 |
|
---|
1508 | case 0x1008ff00:
|
---|
1509 | // "Internet" keys
|
---|
1510 | return s_map1008FF[k & 0xff];
|
---|
1511 |
|
---|
1512 | default: {
|
---|
1513 | // lookup character in table
|
---|
1514 | CKeySymMap::const_iterator index = s_keySymToUCS4.find(k);
|
---|
1515 | if (index != s_keySymToUCS4.end()) {
|
---|
1516 | return static_cast<KeyID>(index->second);
|
---|
1517 | }
|
---|
1518 |
|
---|
1519 | // unknown character
|
---|
1520 | return kKeyNone;
|
---|
1521 | }
|
---|
1522 | }
|
---|
1523 | }
|
---|
1524 |
|
---|
1525 | UInt32
|
---|
1526 | CXWindowsUtil::getModifierBitForKeySym(KeySym keysym)
|
---|
1527 | {
|
---|
1528 | switch (keysym) {
|
---|
1529 | case XK_Shift_L:
|
---|
1530 | case XK_Shift_R:
|
---|
1531 | return kKeyModifierBitShift;
|
---|
1532 |
|
---|
1533 | case XK_Control_L:
|
---|
1534 | case XK_Control_R:
|
---|
1535 | return kKeyModifierBitControl;
|
---|
1536 |
|
---|
1537 | case XK_Alt_L:
|
---|
1538 | case XK_Alt_R:
|
---|
1539 | return kKeyModifierBitAlt;
|
---|
1540 |
|
---|
1541 | case XK_Meta_L:
|
---|
1542 | case XK_Meta_R:
|
---|
1543 | return kKeyModifierBitMeta;
|
---|
1544 |
|
---|
1545 | case XK_Super_L:
|
---|
1546 | case XK_Super_R:
|
---|
1547 | case XK_Hyper_L:
|
---|
1548 | case XK_Hyper_R:
|
---|
1549 | return kKeyModifierBitSuper;
|
---|
1550 |
|
---|
1551 | case XK_Mode_switch:
|
---|
1552 | case XK_ISO_Level3_Shift:
|
---|
1553 | return kKeyModifierBitAltGr;
|
---|
1554 |
|
---|
1555 | case XK_Caps_Lock:
|
---|
1556 | return kKeyModifierBitCapsLock;
|
---|
1557 |
|
---|
1558 | case XK_Num_Lock:
|
---|
1559 | return kKeyModifierBitNumLock;
|
---|
1560 |
|
---|
1561 | case XK_Scroll_Lock:
|
---|
1562 | return kKeyModifierBitScrollLock;
|
---|
1563 |
|
---|
1564 | default:
|
---|
1565 | return kKeyModifierBitNone;
|
---|
1566 | }
|
---|
1567 | }
|
---|
1568 |
|
---|
1569 | CString
|
---|
1570 | CXWindowsUtil::atomToString(Display* display, Atom atom)
|
---|
1571 | {
|
---|
1572 | if (atom == 0) {
|
---|
1573 | return "None";
|
---|
1574 | }
|
---|
1575 |
|
---|
1576 | bool error = false;
|
---|
1577 | CXWindowsUtil::CErrorLock lock(display, &error);
|
---|
1578 | char* name = XGetAtomName(display, atom);
|
---|
1579 | if (error) {
|
---|
1580 | return CStringUtil::print("<UNKNOWN> (%d)", (int)atom);
|
---|
1581 | }
|
---|
1582 | else {
|
---|
1583 | CString msg = CStringUtil::print("%s (%d)", name, (int)atom);
|
---|
1584 | XFree(name);
|
---|
1585 | return msg;
|
---|
1586 | }
|
---|
1587 | }
|
---|
1588 |
|
---|
1589 | CString
|
---|
1590 | CXWindowsUtil::atomsToString(Display* display, const Atom* atom, UInt32 num)
|
---|
1591 | {
|
---|
1592 | char** names = new char*[num];
|
---|
1593 | bool error = false;
|
---|
1594 | CXWindowsUtil::CErrorLock lock(display, &error);
|
---|
1595 | XGetAtomNames(display, const_cast<Atom*>(atom), (int)num, names);
|
---|
1596 | CString msg;
|
---|
1597 | if (error) {
|
---|
1598 | for (UInt32 i = 0; i < num; ++i) {
|
---|
1599 | msg += CStringUtil::print("<UNKNOWN> (%d), ", (int)atom[i]);
|
---|
1600 | }
|
---|
1601 | }
|
---|
1602 | else {
|
---|
1603 | for (UInt32 i = 0; i < num; ++i) {
|
---|
1604 | msg += CStringUtil::print("%s (%d), ", names[i], (int)atom[i]);
|
---|
1605 | XFree(names[i]);
|
---|
1606 | }
|
---|
1607 | }
|
---|
1608 | delete[] names;
|
---|
1609 | if (msg.size() > 2) {
|
---|
1610 | msg.erase(msg.size() - 2);
|
---|
1611 | }
|
---|
1612 | return msg;
|
---|
1613 | }
|
---|
1614 |
|
---|
1615 | void
|
---|
1616 | CXWindowsUtil::convertAtomProperty(CString& data)
|
---|
1617 | {
|
---|
1618 | // as best i can tell, 64-bit systems don't pack Atoms into properties
|
---|
1619 | // as 32-bit numbers but rather as the 64-bit numbers they are. that
|
---|
1620 | // seems wrong but we have to cope. sometimes we'll get a list of
|
---|
1621 | // atoms that's 8*n+4 bytes long, missing the trailing 4 bytes which
|
---|
1622 | // should all be 0. since we're going to reference the Atoms as
|
---|
1623 | // 64-bit numbers we have to ensure the last number is a full 64 bits.
|
---|
1624 | if (sizeof(Atom) != 4 && ((data.size() / 4) & 1) != 0) {
|
---|
1625 | UInt32 zero = 0;
|
---|
1626 | data.append(reinterpret_cast<char*>(&zero), sizeof(zero));
|
---|
1627 | }
|
---|
1628 | }
|
---|
1629 |
|
---|
1630 | void
|
---|
1631 | CXWindowsUtil::appendAtomData(CString& data, Atom atom)
|
---|
1632 | {
|
---|
1633 | data.append(reinterpret_cast<char*>(&atom), sizeof(Atom));
|
---|
1634 | }
|
---|
1635 |
|
---|
1636 | void
|
---|
1637 | CXWindowsUtil::replaceAtomData(CString& data, UInt32 index, Atom atom)
|
---|
1638 | {
|
---|
1639 | data.replace(index * sizeof(Atom), sizeof(Atom),
|
---|
1640 | reinterpret_cast<const char*>(&atom),
|
---|
1641 | sizeof(Atom));
|
---|
1642 | }
|
---|
1643 |
|
---|
1644 | void
|
---|
1645 | CXWindowsUtil::appendTimeData(CString& data, Time time)
|
---|
1646 | {
|
---|
1647 | data.append(reinterpret_cast<char*>(&time), sizeof(Time));
|
---|
1648 | }
|
---|
1649 |
|
---|
1650 | Bool
|
---|
1651 | CXWindowsUtil::propertyNotifyPredicate(Display*, XEvent* xevent, XPointer arg)
|
---|
1652 | {
|
---|
1653 | CPropertyNotifyPredicateInfo* filter =
|
---|
1654 | reinterpret_cast<CPropertyNotifyPredicateInfo*>(arg);
|
---|
1655 | return (xevent->type == PropertyNotify &&
|
---|
1656 | xevent->xproperty.window == filter->m_window &&
|
---|
1657 | xevent->xproperty.atom == filter->m_property &&
|
---|
1658 | xevent->xproperty.state == PropertyNewValue) ? True : False;
|
---|
1659 | }
|
---|
1660 |
|
---|
1661 | void
|
---|
1662 | CXWindowsUtil::initKeyMaps()
|
---|
1663 | {
|
---|
1664 | if (s_keySymToUCS4.empty()) {
|
---|
1665 | for (size_t i =0; i < sizeof(s_keymap) / sizeof(s_keymap[0]); ++i) {
|
---|
1666 | s_keySymToUCS4[s_keymap[i].keysym] = s_keymap[i].ucs4;
|
---|
1667 | }
|
---|
1668 | }
|
---|
1669 | }
|
---|
1670 |
|
---|
1671 |
|
---|
1672 | //
|
---|
1673 | // CXWindowsUtil::CErrorLock
|
---|
1674 | //
|
---|
1675 |
|
---|
1676 | CXWindowsUtil::CErrorLock* CXWindowsUtil::CErrorLock::s_top = NULL;
|
---|
1677 |
|
---|
1678 | CXWindowsUtil::CErrorLock::CErrorLock(Display* display) :
|
---|
1679 | m_display(display)
|
---|
1680 | {
|
---|
1681 | install(&CXWindowsUtil::CErrorLock::ignoreHandler, NULL);
|
---|
1682 | }
|
---|
1683 |
|
---|
1684 | CXWindowsUtil::CErrorLock::CErrorLock(Display* display, bool* flag) :
|
---|
1685 | m_display(display)
|
---|
1686 | {
|
---|
1687 | install(&CXWindowsUtil::CErrorLock::saveHandler, flag);
|
---|
1688 | }
|
---|
1689 |
|
---|
1690 | CXWindowsUtil::CErrorLock::CErrorLock(Display* display,
|
---|
1691 | ErrorHandler handler, void* data) :
|
---|
1692 | m_display(display)
|
---|
1693 | {
|
---|
1694 | install(handler, data);
|
---|
1695 | }
|
---|
1696 |
|
---|
1697 | CXWindowsUtil::CErrorLock::~CErrorLock()
|
---|
1698 | {
|
---|
1699 | // make sure everything finishes before uninstalling handler
|
---|
1700 | if (m_display != NULL) {
|
---|
1701 | XSync(m_display, False);
|
---|
1702 | }
|
---|
1703 |
|
---|
1704 | // restore old handler
|
---|
1705 | XSetErrorHandler(m_oldXHandler);
|
---|
1706 | s_top = m_next;
|
---|
1707 | }
|
---|
1708 |
|
---|
1709 | void
|
---|
1710 | CXWindowsUtil::CErrorLock::install(ErrorHandler handler, void* data)
|
---|
1711 | {
|
---|
1712 | // make sure everything finishes before installing handler
|
---|
1713 | if (m_display != NULL) {
|
---|
1714 | XSync(m_display, False);
|
---|
1715 | }
|
---|
1716 |
|
---|
1717 | // install handler
|
---|
1718 | m_handler = handler;
|
---|
1719 | m_userData = data;
|
---|
1720 | m_oldXHandler = XSetErrorHandler(
|
---|
1721 | &CXWindowsUtil::CErrorLock::internalHandler);
|
---|
1722 | m_next = s_top;
|
---|
1723 | s_top = this;
|
---|
1724 | }
|
---|
1725 |
|
---|
1726 | int
|
---|
1727 | CXWindowsUtil::CErrorLock::internalHandler(Display* display, XErrorEvent* event)
|
---|
1728 | {
|
---|
1729 | if (s_top != NULL && s_top->m_handler != NULL) {
|
---|
1730 | s_top->m_handler(display, event, s_top->m_userData);
|
---|
1731 | }
|
---|
1732 | return 0;
|
---|
1733 | }
|
---|
1734 |
|
---|
1735 | void
|
---|
1736 | CXWindowsUtil::CErrorLock::ignoreHandler(Display*, XErrorEvent* e, void*)
|
---|
1737 | {
|
---|
1738 | LOG((CLOG_DEBUG1 "ignoring X error: %d", e->error_code));
|
---|
1739 | }
|
---|
1740 |
|
---|
1741 | void
|
---|
1742 | CXWindowsUtil::CErrorLock::saveHandler(Display*, XErrorEvent* e, void* flag)
|
---|
1743 | {
|
---|
1744 | LOG((CLOG_DEBUG1 "flagging X error: %d", e->error_code));
|
---|
1745 | *reinterpret_cast<bool*>(flag) = true;
|
---|
1746 | }
|
---|