1 /*
2 * Copyright (c) 2014 Jared Gonzalez
3 *
4 * Permission is hereby granted, free of charge, to any
5 * person obtaining a copy of this software and associated
6 * documentation files (the "Software"), to deal in the
7 * Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish,
9 * distribute, sublicense, and/or sell copies of the
10 * Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice
14 * shall be included in all copies or substantial portions of
15 * the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
18 * KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
19 * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
20 * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
21 * OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
22 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 *
26 * File: com_jarego_jayatana_jkey2xkey.c
27 * Author: Jared Gonzalez
28 */
29 #include "com_jarego_jayatana_jkey2xkey.h"
30
31 #include <stdlib.h>
32 #include <string.h>
33 #include <xkbcommon/xkbcommon.h>
34 /**
35 * Convertir acelerador de menu Java aun acelerador X
36 */
jkeycode_to_xkey_map(int keycode)37 int jkeycode_to_xkey_map(int keycode)
38 {
39 switch (keycode)
40 {
41 case JK_ENTER:
42 return XKB_KEY_Return;
43 case JK_BACK_SPACE:
44 return XKB_KEY_BackSpace;
45 case JK_TAB:
46 return XKB_KEY_Tab;
47 case JK_CANCEL:
48 return XKB_KEY_Cancel;
49 case JK_CLEAR:
50 return XKB_KEY_Clear;
51 /*case JK_SHIFT: return XKB_KEY_;
52 case JK_CONTROL: return XKB_KEY_;
53 case JK_ALT: return XKB_KEY_;*/
54 case JK_PAUSE:
55 return XKB_KEY_Pause;
56 case JK_CAPS_LOCK:
57 return XKB_KEY_Caps_Lock;
58 case JK_ESCAPE:
59 return XKB_KEY_Escape;
60 case JK_SPACE:
61 return XKB_KEY_space;
62 case JK_PAGE_UP:
63 return XKB_KEY_Page_Up;
64 case JK_PAGE_DOWN:
65 return XKB_KEY_Page_Down;
66 case JK_END:
67 return XKB_KEY_End;
68 case JK_HOME:
69 return XKB_KEY_Home;
70 case JK_LEFT:
71 return XKB_KEY_Left;
72 case JK_UP:
73 return XKB_KEY_Up;
74 case JK_RIGHT:
75 return XKB_KEY_Right;
76 case JK_DOWN:
77 return XKB_KEY_Down;
78 case JK_COMMA:
79 return XKB_KEY_comma;
80 case JK_MINUS:
81 return XKB_KEY_minus;
82 case JK_PERIOD:
83 return XKB_KEY_period;
84 case JK_SLASH:
85 return XKB_KEY_slash;
86 /*case JK_0: return XKB_KEY_;
87 case JK_1: return XKB_KEY_;
88 case JK_2: return XKB_KEY_;
89 case JK_3: return XKB_KEY_;
90 case JK_4: return XKB_KEY_;
91 case JK_5: return XKB_KEY_;
92 case JK_6: return XKB_KEY_;
93 case JK_7: return XKB_KEY_;
94 case JK_8: return XKB_KEY_;
95 case JK_9: return XKB_KEY_;*/
96 case JK_SEMICOLON:
97 return XKB_KEY_semicolon;
98 case JK_EQUALS:
99 return XKB_KEY_equal;
100 /*case JK_A: return XKB_KEY_;
101 case JK_B: return XKB_KEY_;
102 case JK_C: return XKB_KEY_;
103 case JK_D: return XKB_KEY_;
104 case JK_E: return XKB_KEY_;
105 case JK_F: return XKB_KEY_;
106 case JK_G: return XKB_KEY_;
107 case JK_H: return XKB_KEY_;
108 case JK_I: return XKB_KEY_;
109 case JK_J: return XKB_KEY_;
110 case JK_K: return XKB_KEY_;
111 case JK_L: return XKB_KEY_;
112 case JK_M: return XKB_KEY_;
113 case JK_N: return XKB_KEY_;
114 case JK_O: return XKB_KEY_;
115 case JK_P: return XKB_KEY_;
116 case JK_Q: return XKB_KEY_;
117 case JK_R: return XKB_KEY_;
118 case JK_S: return XKB_KEY_;
119 case JK_T: return XKB_KEY_;
120 case JK_U: return XKB_KEY_;
121 case JK_V: return XKB_KEY_;
122 case JK_W: return XKB_KEY_;
123 case JK_X: return XKB_KEY_;
124 case JK_Y: return XKB_KEY_;
125 case JK_Z: return XKB_KEY_;*/
126 case JK_OPEN_BRACKET:
127 return XKB_KEY_bracketleft;
128 case JK_BACK_SLASH:
129 return XKB_KEY_backslash;
130 case JK_CLOSE_BRACKET:
131 return XKB_KEY_bracketright;
132 /*case JK_NUMPAD0: return XKB_KEY_;
133 case JK_NUMPAD1: return XKB_KEY_;
134 case JK_NUMPAD2: return XKB_KEY_;
135 case JK_NUMPAD3: return XKB_KEY_;
136 case JK_NUMPAD4: return XKB_KEY_;
137 case JK_NUMPAD5: return XKB_KEY_;
138 case JK_NUMPAD6: return XKB_KEY_;
139 case JK_NUMPAD7: return XKB_KEY_;
140 case JK_NUMPAD8: return XKB_KEY_;
141 case JK_NUMPAD9: return XKB_KEY_;*/
142 case JK_MULTIPLY:
143 return XKB_KEY_multiply;
144 /*case JK_ADD: return XKB_KEY_;
145 case JK_SEPARATER: return XKB_KEY_;
146 case JK_SEPARATOR: return XKB_KEY_;
147 case JK_SUBTRACT: return XKB_KEY_;
148 case JK_DECIMAL: return XKB_KEY_; */
149 case JK_DIVIDE:
150 return XKB_KEY_division;
151 case JK_DELETE:
152 return XKB_KEY_Delete;
153 case JK_NUM_LOCK:
154 return XKB_KEY_Num_Lock;
155 case JK_SCROLL_LOCK:
156 return XKB_KEY_Scroll_Lock;
157 /*case JK_F1: return XKB_KEY_;
158 case JK_F2: return XKB_KEY_;
159 case JK_F3: return XKB_KEY_;
160 case JK_F4: return XKB_KEY_;
161 case JK_F5: return XKB_KEY_;
162 case JK_F6: return XKB_KEY_;
163 case JK_F7: return XKB_KEY_;
164 case JK_F8: return XKB_KEY_;
165 case JK_F9: return XKB_KEY_;
166 case JK_F10: return XKB_KEY_;
167 case JK_F11: return XKB_KEY_;
168 case JK_F12: return XKB_KEY_;
169 case JK_F13: return XKB_KEY_;
170 case JK_F14: return XKB_KEY_;
171 case JK_F15: return XKB_KEY_;
172 case JK_F16: return XKB_KEY_;
173 case JK_F17: return XKB_KEY_;
174 case JK_F18: return XKB_KEY_;
175 case JK_F19: return XKB_KEY_;
176 case JK_F20: return XKB_KEY_;
177 case JK_F21: return XKB_KEY_;
178 case JK_F22: return XKB_KEY_;
179 case JK_F23: return XKB_KEY_;
180 case JK_F24: return XKB_KEY_;*/
181 case JK_PRINTSCREEN:
182 return XKB_KEY_Print;
183 case JK_INSERT:
184 return XKB_KEY_Insert;
185 case JK_HELP:
186 return XKB_KEY_Help;
187 case JK_META:
188 return XKB_KEY_Meta_R;
189 case JK_BACK_QUOTE:
190 return XKB_KEY_quoteright;
191 case JK_QUOTE:
192 return XKB_KEY_quoteleft;
193 case JK_KP_UP:
194 return XKB_KEY_KP_Up;
195 case JK_KP_DOWN:
196 return XKB_KEY_KP_Down;
197 case JK_KP_LEFT:
198 return XKB_KEY_KP_Left;
199 case JK_KP_RIGHT:
200 return XKB_KEY_KP_Right;
201 case JK_DEAD_GRAVE:
202 return XKB_KEY_dead_grave;
203 case JK_DEAD_ACUTE:
204 return XKB_KEY_dead_acute;
205 case JK_DEAD_CIRCUMFLEX:
206 return XKB_KEY_dead_circumflex;
207 case JK_DEAD_TILDE:
208 return XKB_KEY_dead_tilde;
209 case JK_DEAD_MACRON:
210 return XKB_KEY_dead_macron;
211 case JK_DEAD_BREVE:
212 return XKB_KEY_dead_breve;
213 case JK_DEAD_ABOVEDOT:
214 return XKB_KEY_dead_abovedot;
215 case JK_DEAD_DIAERESIS:
216 return XKB_KEY_dead_diaeresis;
217 case JK_DEAD_ABOVERING:
218 return XKB_KEY_dead_abovering;
219 case JK_DEAD_DOUBLEACUTE:
220 return XKB_KEY_dead_doubleacute;
221 case JK_DEAD_CARON:
222 return XKB_KEY_dead_caron;
223 case JK_DEAD_CEDILLA:
224 return XKB_KEY_dead_cedilla;
225 case JK_DEAD_OGONEK:
226 return XKB_KEY_dead_ogonek;
227 case JK_DEAD_IOTA:
228 return XKB_KEY_dead_iota;
229 case JK_DEAD_VOICED_SOUND:
230 return XKB_KEY_dead_voiced_sound;
231 case JK_DEAD_SEMIVOICED_SOUND:
232 return XKB_KEY_dead_semivoiced_sound;
233 case JK_AMPERSAND:
234 return XKB_KEY_ampersand;
235 case JK_ASTERISK:
236 return XKB_KEY_asterisk;
237 case JK_QUOTEDBL:
238 return XKB_KEY_quotedbl;
239 case JK_LESS:
240 return XKB_KEY_less;
241 case JK_GREATER:
242 return XKB_KEY_greater;
243 case JK_BRACELEFT:
244 return XKB_KEY_braceleft;
245 case JK_BRACERIGHT:
246 return XKB_KEY_braceright;
247 case JK_AT:
248 return XKB_KEY_at;
249 case JK_COLON:
250 return XKB_KEY_colon;
251 /* case JK_CIRCUMFLEX: return XKB_KEY_; */
252 case JK_DOLLAR:
253 return XKB_KEY_dollar;
254 case JK_EURO_SIGN:
255 return XKB_KEY_EuroSign;
256 case JK_EXCLAMATION_MARK:
257 return XKB_KEY_exclamdown;
258 case JK_INVERTED_EXCLAMATION_MARK:
259 return XKB_KEY_exclam;
260 case JK_LEFT_PARENTHESIS:
261 return XKB_KEY_parenleft;
262 case JK_NUMBER_SIGN:
263 return XKB_KEY_numbersign;
264 case JK_PLUS:
265 return XKB_KEY_plus;
266 case JK_RIGHT_PARENTHESIS:
267 return XKB_KEY_parenright;
268 case JK_UNDERSCORE:
269 return XKB_KEY_underscore;
270 case JK_WINDOWS:
271 return XKB_KEY_Super_L;
272 /* case JK_CONTEXT_MENU: return XKB_KEY_;
273 case K_FINAL: return XKB_KEY_;
274 case JK_CONVERT: return XKB_KEY_;
275 case JK_NONCONVERT: return XKB_KEY_;
276 case JK_ACCEPT: return XKB_KEY_;
277 case JK_MODECHANGE: return XKB_KEY_;
278 case JK_KANA: return XKB_KEY; */
279 case JK_KANJI:
280 return XKB_KEY_Kanji;
281 /* case JK_ALPHANUMERIC: return XKB_KEY_; */
282 // case JK_KATAKANA: return XKB_KEY_KATAKANA;
283 case JK_HIRAGANA:
284 return XKB_KEY_Hiragana;
285 /*case JK_FULL_WIDTH: return XKB_KEY_;
286 case JK_HALF_WIDTH: return XKB_KEY_;
287 case JK_ROMAN_CHARACTERS: return XKB_KEY_;
288 case JK_ALL_CANDIDATES: return XKB_KEY_;
289 case JK_PREVIOUS_CANDIDATE: return XKB_KEY_; */
290 case JK_CODE_INPUT:
291 return XKB_KEY_Codeinput;
292 // case JK_JAPANESE_KATAKANA: return XKB_KEY_KATAKANA;
293 case JK_JAPANESE_HIRAGANA:
294 return XKB_KEY_Hiragana;
295 /*case JK_JAPANESE_ROMAN: return XKB_KEY_; */
296 case JK_KANA_LOCK:
297 return XKB_KEY_Kana_Lock;
298 /*case JK_INPUT_METHOD_ON_OFF: return XKB_KEY_;
299 case JK_CUT: return XKB_KEY_;
300 case JK_COPY: return XKB_KEY_;
301 case JK_PASTE: return XKB_KEY_;
302 case JK_UNDO: return XKB_KEY_;
303 case JK_AGAIN: return XKB_KEY_;*/
304 case JK_FIND:
305 return XKB_KEY_Find;
306 /*case JK_PROPS: return XKB_KEY_;
307 case JK_STOP: return XKB_KEY_;
308 case JK_COMPOSE: return XKB_KEY_;
309 case JK_ALT_GRAPH: return XKB_KEY_;*/
310 case JK_BEGIN:
311 return XKB_KEY_Begin;
312 default:
313 return 0;
314 }
315 }
316
317 /**
318 * Convertir acelerador de menu Java aun acelerador X
319 */
jkeycode_to_xkey(int keycode)320 char *jkeycode_to_xkey(int keycode)
321 {
322 int code = 0;
323
324 if (keycode >= JK_A && keycode <= JK_Z)
325 code = keycode - JK_A + XKB_KEY_A;
326 else if (keycode >= JK_F1 && keycode <= JK_F12)
327 code = keycode - JK_F1 + XKB_KEY_F1;
328 else if (keycode >= JK_0 && keycode <= JK_9)
329 code = keycode - JK_0 + XKB_KEY_0;
330 else
331 code = jkeycode_to_xkey_map(keycode);
332
333 if (code == 0)
334 return NULL;
335
336 char ret[40];
337 size_t rets = xkb_keysym_to_utf8(code, ret, 1024);
338 char *retf = (char *)calloc((rets + 1), sizeof(char));
339 strncpy(retf, ret, rets);
340 return retf;
341 }
342