1 
2 #include "NativeWindowSystem.h"
3 
4 #include <QKeySequence>
5 #include <QX11Info>
6 
7 // XCB/X11 Includes
8 #define XK_MISCELLANY
9 #define XK_XKB_KEYS
10 #define XK_LATIN1
11 #define XK_LATIN2
12 #define XK_LATIN3
13 #define XK_LATIN4
14 #define XK_LATIN8
15 #define XK_LATIN9
16 //NOTE: Look at the keysymdef.h file for additional define/characters which we may need later
17 #include <X11/keysymdef.h>
18 #include <xcb/xcb_keysyms.h>
19 
20 
21 //Small simplification functions
KeycodeToQt(int keycode)22 Qt::Key NativeWindowSystem::KeycodeToQt(int keycode){
23   static xcb_key_symbols_t *SYM = 0;
24   if(SYM==0){ SYM = xcb_key_symbols_alloc(QX11Info::connection()); }
25   xcb_keysym_t symbol = xcb_key_symbols_get_keysym(SYM, keycode,0);
26   //not sure about the "column" input - we want raw keys though so ignore the "modified" key states (columns) for now
27   //qDebug() << "Try to convert keycode to Qt::Key:" << keycode << symbol;
28   //Now map this symbol to the appropriate Qt::Key enumeration
29   switch(symbol){
30 	//FUNCTION KEYS
31 	case XK_F1: return Qt::Key_F1;
32 	case XK_F2: return Qt::Key_F2;
33 	case XK_F3: return Qt::Key_F3;
34 	case XK_F4: return Qt::Key_F4;
35 	case XK_F5: return Qt::Key_F5;
36 	case XK_F6: return Qt::Key_F6;
37 	case XK_F7: return Qt::Key_F7;
38 	case XK_F8: return Qt::Key_F8;
39 	case XK_F9: return Qt::Key_F9;
40 	case XK_F10: return Qt::Key_F10;
41 	case XK_F11: return Qt::Key_F11;
42 	case XK_F12: return Qt::Key_F12;
43 	case XK_F13: return Qt::Key_F13;
44 	case XK_F14: return Qt::Key_F14;
45 	case XK_F15: return Qt::Key_F15;
46 	case XK_F16: return Qt::Key_F16;
47 	case XK_F17: return Qt::Key_F17;
48 	case XK_F18: return Qt::Key_F18;
49 	case XK_F19: return Qt::Key_F19;
50 	case XK_F20: return Qt::Key_F20;
51 	case XK_F21: return Qt::Key_F21;
52 	case XK_F22: return Qt::Key_F22;
53 	case XK_F23: return Qt::Key_F23;
54 	case XK_F24: return Qt::Key_F24;
55 	case XK_F25: return Qt::Key_F25;
56 	case XK_F26: return Qt::Key_F26;
57 	case XK_F27: return Qt::Key_F27;
58 	case XK_F28: return Qt::Key_F28;
59 	case XK_F29: return Qt::Key_F29;
60 	case XK_F30: return Qt::Key_F30;
61 	case XK_F31: return Qt::Key_F31;
62 	case XK_F32: return Qt::Key_F32;
63 	case XK_F33: return Qt::Key_F33;
64 	case XK_F34: return Qt::Key_F34;
65 	case XK_F35: return Qt::Key_F35;
66 	//Miscellaneous Keys
67 	case XK_BackSpace: return Qt::Key_Backspace;
68 	case XK_Delete: return Qt::Key_Delete;
69 	//case XK_LineFeed: return Qt::Key_Backspace;
70 	case XK_Clear: return Qt::Key_Clear;
71 	case XK_Return: return Qt::Key_Return;
72 	case XK_Pause: return Qt::Key_Pause;
73 	case XK_Scroll_Lock: return Qt::Key_ScrollLock;
74 	case XK_Sys_Req: return Qt::Key_SysReq;
75 	case XK_Escape: return Qt::Key_Escape;
76 	case XK_Select: return Qt::Key_Select;
77 	case XK_Print: return Qt::Key_Print;
78 	//case XK_Execute: return Qt::Key_Execute;
79 	case XK_Insert: return Qt::Key_Insert;
80 	case XK_Undo: return Qt::Key_Undo;
81 	case XK_Redo: return Qt::Key_Redo;
82 	case XK_Menu: return Qt::Key_Menu;
83 	case XK_Find: return Qt::Key_Find;
84 	case XK_Cancel: return Qt::Key_Cancel;
85 	case XK_Help: return Qt::Key_Help;
86 	//case XK_Break: return Qt::Key_Break;
87 	//case XK_Mode_switch: return Qt::Key_Backspace;
88 	//case XK_script_switch: return Qt::Key_Backspace;
89 	case XK_Num_Lock: return Qt::Key_NumLock;
90 	//Cursor  Controls
91 	case XK_Home: return Qt::Key_Home;
92 	case XK_Left: return Qt::Key_Left;
93 	case XK_Up: return Qt::Key_Up;
94 	case XK_Right: return Qt::Key_Right;
95 	case XK_Down: return Qt::Key_Down;
96 	//case XK_Prior: return Qt::Key_Backspace;
97 	case XK_Page_Up: return Qt::Key_PageUp;
98 	case XK_Page_Down: return Qt::Key_PageDown;
99 	//case XK_Next: return Qt::Key_Backspace;
100 	case XK_End: return Qt::Key_End;
101 	//case XK_Begin: return Qt::Key_Backspace;
102 	// Keypad Functions and numbers
103 	case XK_KP_Space: return Qt::Key_Space;
104 	case XK_KP_Tab: return Qt::Key_Tab;
105 	case XK_KP_Enter: return Qt::Key_Enter;
106 	case XK_KP_F1: return Qt::Key_F1;
107 	case XK_KP_F2: return Qt::Key_F2;
108 	case XK_KP_F3: return Qt::Key_F3;
109 	case XK_KP_F4: return Qt::Key_F4;
110 	case XK_KP_Home: return Qt::Key_Home;
111 	case XK_KP_Left: return Qt::Key_Left;
112 	case XK_KP_Up: return Qt::Key_Up;
113 	case XK_KP_Right: return Qt::Key_Right;
114 	case XK_KP_Down: return Qt::Key_Down;
115 	//case XK_KP_Prior: return Qt::Key_
116 	case XK_KP_Page_Up: return Qt::Key_PageUp;
117 	//case XK_KP_Next: return Qt::Key_
118 	case XK_KP_Page_Down: return Qt::Key_PageDown;
119 	case XK_KP_End: return Qt::Key_End;
120 	//case XK_KP_Begin: return Qt::Key_
121 	case XK_KP_Insert: return Qt::Key_Insert;
122 	case XK_KP_Delete: return Qt::Key_Delete;
123 	case XK_KP_Equal: return Qt::Key_Equal;
124 	case XK_KP_Multiply: return Qt::Key_Asterisk;
125 	case XK_KP_Add: return Qt::Key_Plus;
126 	case XK_KP_Separator: return Qt::Key_Comma;  //X11 definitions say this is often comma
127 	case XK_KP_Subtract: return Qt::Key_Minus;
128 	case XK_KP_Decimal: return Qt::Key_Period;
129 	case XK_KP_Divide: return Qt::Key_Slash;
130 	case XK_KP_0: return Qt::Key_0;
131 	case XK_KP_1: return Qt::Key_1;
132 	case XK_KP_2: return Qt::Key_2;
133 	case XK_KP_3: return Qt::Key_3;
134 	case XK_KP_4: return Qt::Key_4;
135 	case XK_KP_5: return Qt::Key_5;
136 	case XK_KP_6: return Qt::Key_6;
137 	case XK_KP_7: return Qt::Key_7;
138 	case XK_KP_8: return Qt::Key_8;
139 	case XK_KP_9: return Qt::Key_9;
140 	// Modifier Keys
141 	case XK_Shift_L: return Qt::Key_Shift;
142 	case XK_Shift_R: return Qt::Key_Shift;
143 	case XK_Control_L: return Qt::Key_Control;
144 	case XK_Control_R: return Qt::Key_Control;
145 	case XK_Caps_Lock: return Qt::Key_CapsLock;
146 	//case XK_Shift_Lock: return Qt::Key_ShiftLock;
147 	case XK_Meta_L: return Qt::Key_Meta;
148 	case XK_Meta_R: return Qt::Key_Meta;
149 	case XK_Alt_L: return Qt::Key_Alt;
150 	case XK_Alt_R: return Qt::Key_Alt;
151 	case XK_Super_L: return Qt::Key_Super_L;
152 	case XK_Super_R: return Qt::Key_Super_R;
153 	case XK_Hyper_L: return Qt::Key_Hyper_L;
154 	case XK_Hyper_R: return Qt::Key_Hyper_R;
155 	case XK_space: return Qt::Key_Space;
156 	case XK_exclam: return Qt::Key_Exclam;
157 	case XK_quotedbl: return Qt::Key_QuoteDbl;
158 	case XK_numbersign: return Qt::Key_NumberSign;
159 	case XK_dollar: return Qt::Key_Dollar;
160 	case XK_percent: return Qt::Key_Percent;
161 	case XK_ampersand: return Qt::Key_Ampersand;
162 	case XK_apostrophe: return Qt::Key_Apostrophe;
163 	case XK_parenleft: return Qt::Key_ParenLeft;
164 	case XK_parenright: return Qt::Key_ParenRight;
165 	case XK_asterisk: return Qt::Key_Asterisk;
166 	case XK_plus: return Qt::Key_Plus;
167 	case XK_comma: return Qt::Key_Comma;
168 	case XK_minus: return Qt::Key_Minus;
169 	case XK_period: return Qt::Key_Period;
170 	case XK_slash: return Qt::Key_Slash;
171 	case XK_0: return Qt::Key_0;
172 	case XK_1: return Qt::Key_1;
173 	case XK_2: return Qt::Key_2;
174 	case XK_3: return Qt::Key_3;
175 	case XK_4: return Qt::Key_4;
176 	case XK_5: return Qt::Key_5;
177 	case XK_6: return Qt::Key_6;
178 	case XK_7: return Qt::Key_7;
179 	case XK_8: return Qt::Key_8;
180 	case XK_9: return Qt::Key_9;
181 	case XK_colon: return Qt::Key_Colon;
182 	case XK_semicolon: return Qt::Key_Semicolon;
183 	case XK_less: return Qt::Key_Less;
184 	case XK_equal: return Qt::Key_Equal;
185 	case XK_greater: return Qt::Key_Greater;
186 	case XK_question: return Qt::Key_Question;
187 	case XK_at: return Qt::Key_At;
188 	case XK_A: return Qt::Key_A;
189 	case XK_B: return Qt::Key_B;
190 	case XK_C: return Qt::Key_C;
191 	case XK_D: return Qt::Key_D;
192 	case XK_E: return Qt::Key_E;
193 	case XK_F: return Qt::Key_F;
194 	case XK_G: return Qt::Key_G;
195 	case XK_H: return Qt::Key_H;
196 	case XK_I: return Qt::Key_I;
197 	case XK_J: return Qt::Key_J;
198 	case XK_K: return Qt::Key_K;
199 	case XK_L: return Qt::Key_L;
200 	case XK_M: return Qt::Key_M;
201 	case XK_N: return Qt::Key_N;
202 	case XK_O: return Qt::Key_O;
203 	case XK_P: return Qt::Key_P;
204 	case XK_Q: return Qt::Key_Q;
205 	case XK_R: return Qt::Key_R;
206 	case XK_S: return Qt::Key_S;
207 	case XK_T: return Qt::Key_T;
208 	case XK_U: return Qt::Key_U;
209 	case XK_V: return Qt::Key_V;
210 	case XK_W: return Qt::Key_W;
211 	case XK_X: return Qt::Key_X;
212 	case XK_Y : return Qt::Key_Y;
213 	case XK_Z: return Qt::Key_Z;
214 	case XK_bracketleft: return Qt::Key_BracketLeft;
215 	case XK_backslash: return Qt::Key_Backslash;
216 	case XK_bracketright: return Qt::Key_BracketRight;
217 	case XK_asciicircum: return Qt::Key_AsciiCircum;
218 	case XK_underscore: return Qt::Key_Underscore;
219 	case XK_grave: return Qt::Key_Agrave;
220 	case XK_a: return Qt::Key_A;
221 	case XK_b: return Qt::Key_B;
222 	case XK_c: return Qt::Key_C;
223 	case XK_d: return Qt::Key_D;
224 	case XK_e: return Qt::Key_E;
225 	case XK_f : return Qt::Key_F;
226 	case XK_g: return Qt::Key_G;
227 	case XK_h: return Qt::Key_H;
228 	case XK_i: return Qt::Key_I;
229 	case XK_j: return Qt::Key_J;
230 	case XK_k: return Qt::Key_K;
231 	case XK_l: return Qt::Key_L;
232 	case XK_m: return Qt::Key_M;
233 	case XK_n: return Qt::Key_N;
234 	case XK_o: return Qt::Key_O;
235 	case XK_p: return Qt::Key_P;
236 	case XK_q: return Qt::Key_Q;
237 	case XK_r: return Qt::Key_R;
238 	case XK_s: return Qt::Key_S;
239 	case XK_t : return Qt::Key_T;
240 	case XK_u: return Qt::Key_U;
241 	case XK_v: return Qt::Key_V;
242 	case XK_w: return Qt::Key_W;
243 	case XK_x: return Qt::Key_X;
244 	case XK_y: return Qt::Key_Y;
245 	case XK_z: return Qt::Key_Z;
246         case  XK_braceleft: return Qt::Key_BraceLeft;
247         case  XK_bar: return Qt::Key_Bar;
248         case  XK_braceright: return Qt::Key_BraceRight;
249         case  XK_asciitilde: return Qt::Key_AsciiTilde;
250 
251         case XK_nobreakspace: return Qt::Key_nobreakspace;
252         case XK_exclamdown: return Qt::Key_exclamdown;
253         case XK_cent: return Qt::Key_cent;
254         case XK_sterling: return Qt::Key_sterling;
255         case XK_currency: return Qt::Key_currency;
256         case XK_yen: return Qt::Key_yen;
257         case XK_brokenbar: return Qt::Key_brokenbar;
258         case XK_section: return Qt::Key_section;
259         case XK_diaeresis: return Qt::Key_diaeresis;
260         case XK_copyright: return Qt::Key_copyright;
261         case XK_ordfeminine: return Qt::Key_ordfeminine;
262         case XK_guillemotleft: return Qt::Key_guillemotleft;
263         case XK_notsign: return Qt::Key_notsign;
264         case XK_hyphen: return Qt::Key_hyphen;
265         case XK_registered: return Qt::Key_registered;
266         case XK_macron: return Qt::Key_macron;
267         case XK_degree: return Qt::Key_degree;
268         case XK_plusminus: return Qt::Key_plusminus;
269         case XK_twosuperior: return Qt::Key_twosuperior;
270         case XK_threesuperior: return Qt::Key_threesuperior;
271         case XK_acute: return Qt::Key_acute;
272         case XK_mu: return Qt::Key_mu;
273         case XK_paragraph: return Qt::Key_paragraph;
274         case XK_periodcentered: return Qt::Key_periodcentered;
275         case XK_cedilla: return Qt::Key_cedilla;
276         case XK_onesuperior: return Qt::Key_onesuperior;
277         case XK_masculine: return Qt::Key_masculine;
278         case XK_guillemotright: return Qt::Key_guillemotright;
279         case XK_onequarter: return Qt::Key_onequarter;
280         case XK_onehalf: return Qt::Key_onehalf;
281         case XK_threequarters: return Qt::Key_threequarters;
282         case XK_questiondown: return Qt::Key_questiondown;
283         case XK_Agrave: return Qt::Key_Agrave;
284         case XK_Aacute: return Qt::Key_Aacute;
285         case XK_Acircumflex: return Qt::Key_Acircumflex;
286         case XK_Atilde: return Qt::Key_Atilde;
287         case XK_Adiaeresis: return Qt::Key_Adiaeresis;
288         case XK_Aring: return Qt::Key_Aring;
289         case XK_AE: return Qt::Key_AE;
290         case XK_Ccedilla: return Qt::Key_Ccedilla;
291         case XK_Egrave: return Qt::Key_Egrave;
292         case XK_Eacute: return Qt::Key_Eacute;
293         case XK_Ecircumflex: return Qt::Key_Ecircumflex;
294         case XK_Ediaeresis: return Qt::Key_Ediaeresis;
295         case XK_Igrave: return Qt::Key_Igrave;
296         case XK_Iacute: return Qt::Key_Iacute;
297         case XK_Icircumflex: return Qt::Key_Icircumflex;
298         case XK_Idiaeresis: return Qt::Key_Idiaeresis;
299         case XK_ETH: return Qt::Key_ETH;
300         //case XK_Eth: return Qt::Key_Eth;
301         case XK_Ntilde: return Qt::Key_Ntilde;
302         case XK_Ograve: return Qt::Key_Ograve;
303         case XK_Oacute: return Qt::Key_Oacute;
304         case XK_Ocircumflex: return Qt::Key_Ocircumflex;
305         case XK_Otilde: return Qt::Key_Otilde;
306         case XK_Odiaeresis: return Qt::Key_Odiaeresis;
307         case XK_multiply: return Qt::Key_multiply;
308         //case XK_Oslash: return Qt::Key_AsciiTilde;
309         case XK_Ooblique: return Qt::Key_Ooblique;
310         case XK_Ugrave: return Qt::Key_Ugrave;
311         case XK_Uacute: return Qt::Key_Uacute;
312         case XK_Ucircumflex: return Qt::Key_Ucircumflex;
313         case XK_Udiaeresis: return Qt::Key_Udiaeresis;
314         case XK_Yacute: return Qt::Key_Yacute;
315         case XK_THORN: return Qt::Key_THORN;
316         //case XK_Thorn: return Qt::Key_AsciiTilde;
317         case XK_ssharp: return Qt::Key_ssharp;
318         /*case XK_agrave: return Qt::Key_AsciiTilde;
319         case XK_aacute: return Qt::Key_AsciiTilde;
320         case XK_acircumflex: return Qt::Key_AsciiTilde;
321         case XK_atilde: return Qt::Key_AsciiTilde;
322         case XK_adiaeresis: return Qt::Key_AsciiTilde;
323         case XK_aring: return Qt::Key_AsciiTilde;
324         case XK_ae: return Qt::Key_AsciiTilde;
325         case XK_ccedilla: return Qt::Key_AsciiTilde;
326         case XK_egrave: return Qt::Key_AsciiTilde;
327         case XK_eacute: return Qt::Key_AsciiTilde;
328         case XK_ecircumflex: return Qt::Key_AsciiTilde;
329         case XK_ediaeresis: return Qt::Key_AsciiTilde;
330         case XK_igrave: return Qt::Key_AsciiTilde;
331         case XK_iacute: return Qt::Key_AsciiTilde;
332         case XK_icircumflex: return Qt::Key_AsciiTilde;
333         case XK_idiaeresis: return Qt::Key_AsciiTilde;
334         case XK_eth: return Qt::Key_AsciiTilde;
335         case XK_ntilde: return Qt::Key_AsciiTilde;
336         case XK_ograve: return Qt::Key_AsciiTilde;
337         case XK_oacute: return Qt::Key_AsciiTilde;
338         case XK_ocircumflex: return Qt::Key_AsciiTilde;
339         case XK_otilde: return Qt::Key_AsciiTilde;
340         case XK_odiaeresis: return Qt::Key_AsciiTilde;
341         case XK_division: return Qt::Key_AsciiTilde;
342         case XK_oslash: return Qt::Key_AsciiTilde;
343         case XK_ooblique: return Qt::Key_AsciiTilde;
344         case XK_ugrave: return Qt::Key_AsciiTilde;
345         case XK_uacute: return Qt::Key_AsciiTilde;
346         case XK_ucircumflex: return Qt::Key_AsciiTilde;
347         case XK_udiaeresis: return Qt::Key_AsciiTilde;
348         case XK_yacute: return Qt::Key_AsciiTilde;
349         case XK_thorn: return Qt::Key_AsciiTilde;
350         case XK_ydiaeresis: return Qt::Key_AsciiTilde;
351 
352         case: XK_Agonek: return Qt::Key_AsciiTilde;
353         case XK_breve: return Qt::Key_AsciiTilde;
354         case XK_Lstroke: return Qt::Key_AsciiTilde;
355         case XK_Lcaron: return Qt::Key_AsciiTilde;
356         case XK_Sacute: return Qt::Key_AsciiTilde;
357         case XK_Scaron: return Qt::Key_AsciiTilde;
358         case XK_Scedilla: return Qt::Key_AsciiTilde;
359         case XK_Tcaron: return Qt::Key_AsciiTilde;
360         case XK_Zacute: return Qt::Key_AsciiTilde;
361         case XK_Zcaron: return Qt::Key_AsciiTilde;
362         case XK_Zabovedot: return Qt::Key_AsciiTilde;
363         case XK_aogonek: return Qt::Key_AsciiTilde;
364         case XK_ogonek: return Qt::Key_AsciiTilde;
365         case XK_lstroke: return Qt::Key_AsciiTilde;
366         case XK_lcaron: return Qt::Key_AsciiTilde;
367         case XK_sacute: return Qt::Key_AsciiTilde;
368         case XK_caron: return Qt::Key_AsciiTilde;
369         case XK_scaron: return Qt::Key_AsciiTilde;
370         case XK_scedilla: return Qt::Key_AsciiTilde;
371         case XK_tcaron: return Qt::Key_AsciiTilde;
372         case XK_zacute: return Qt::Key_AsciiTilde;
373         case XK_doubleacute: return Qt::Key_AsciiTilde;
374         case XK_zcaron: return Qt::Key_AsciiTilde;
375         case XK_zabovedot: return Qt::Key_AsciiTilde;
376         case XK_Racute: return Qt::Key_AsciiTilde;
377         case XK_Abreve: return Qt::Key_AsciiTilde;
378         case XK_Lacute: return Qt::Key_AsciiTilde;
379         case XK_Cacute: return Qt::Key_AsciiTilde;
380         case XK_Ccaron: return Qt::Key_AsciiTilde;
381         case XK_Eogonek: return Qt::Key_AsciiTilde;
382         case XK_Ecaron: return Qt::Key_AsciiTilde;
383         case XK_Dcaron: return Qt::Key_AsciiTilde;
384         case XK_Dstroke: return Qt::Key_AsciiTilde;
385         case XK_Nacute: return Qt::Key_AsciiTilde;
386         case XK_Ncaron: return Qt::Key_AsciiTilde;
387         case XK_Odoubleacute: return Qt::Key_AsciiTilde;
388         case XK_Rcaron: return Qt::Key_AsciiTilde;
389         case XK_Uring: return Qt::Key_AsciiTilde;
390         case XK_Udoubleacute: return Qt::Key_AsciiTilde;
391         case XK_Tcedilla: return Qt::Key_AsciiTilde;
392         case XK_racute: return Qt::Key_AsciiTilde;
393         case XK_abreve: return Qt::Key_AsciiTilde;
394         case XK_lacute: return Qt::Key_AsciiTilde;
395         case XK_cacute: return Qt::Key_AsciiTilde;
396         case XK_ccaron: return Qt::Key_AsciiTilde;
397         case XK_eogonek: return Qt::Key_AsciiTilde;
398         case XK_ecaron: return Qt::Key_AsciiTilde;
399         case XK_dcaron: return Qt::Key_AsciiTilde;
400         case XK_dstroke: return Qt::Key_AsciiTilde;
401         case XK_nacute: return Qt::Key_AsciiTilde;
402         case XK_ncaron: return Qt::Key_AsciiTilde;
403         case XK_odoubleacute: return Qt::Key_AsciiTilde;
404         case XK_rcaron: return Qt::Key_AsciiTilde;
405         case XK_uring: return Qt::Key_AsciiTilde;
406         case XK_udoubleacute: return Qt::Key_AsciiTilde;
407         case XK_tcedilla: return Qt::Key_AsciiTilde;
408         case XK_abovedot: return Qt::Key_AsciiTilde;
409         case XK_Hstroke: return Qt::Key_AsciiTilde;
410         case XK_Hcircumflex: return Qt::Key_AsciiTilde;
411         case XK_Iabovedot: return Qt::Key_AsciiTilde;
412         case XK_Gbreve: return Qt::Key_AsciiTilde;
413         case XK_Jcircumflex: return Qt::Key_AsciiTilde;
414         case XK_hstroke: return Qt::Key_AsciiTilde;
415         case XK_hcircumflex: return Qt::Key_AsciiTilde;
416         case XK_idotless: return Qt::Key_AsciiTilde;
417         case XK_gbreve: return Qt::Key_AsciiTilde;
418         case XK_jcircumflex: return Qt::Key_AsciiTilde;
419         case XK_Cabovedot: return Qt::Key_AsciiTilde;
420         case XK_Ccircumflex: return Qt::Key_AsciiTilde;
421         case XK_Gabovedot: return Qt::Key_AsciiTilde;
422         case XK_Gcircumflex: return Qt::Key_AsciiTilde;
423         case XK_Ubreve: return Qt::Key_AsciiTilde;
424         case XK_Scircumflex: return Qt::Key_AsciiTilde;
425         case XK_cabovedot: return Qt::Key_AsciiTilde;
426         case XK_ccircumflex: return Qt::Key_AsciiTilde;
427         case XK_gabovedot: return Qt::Key_AsciiTilde;
428         case XK_gcircumflex: return Qt::Key_AsciiTilde;
429         case XK_ubreve: return Qt::Key_AsciiTilde;
430         case XK_scircumflex: return Qt::Key_AsciiTilde;
431         case XK_kra: return Qt::Key_AsciiTilde;
432         case XK_kappa: return Qt::Key_AsciiTilde;
433         case XK_Rcedilla: return Qt::Key_AsciiTilde;
434         case XK_Itilde: return Qt::Key_AsciiTilde;
435         case XK_Lcedilla: return Qt::Key_AsciiTilde;
436         case XK_Emacron: return Qt::Key_AsciiTilde;
437         case XK_Gcedilla: return Qt::Key_AsciiTilde;
438         case XK_Tslash: return Qt::Key_AsciiTilde;
439         case XK_rcedilla: return Qt::Key_AsciiTilde;
440         case XK_itilde: return Qt::Key_AsciiTilde;
441         case XK_lcedilla: return Qt::Key_AsciiTilde;
442         case XK_emacron: return Qt::Key_AsciiTilde;
443         case XK_gcedilla: return Qt::Key_AsciiTilde;
444         case XK_tslash: return Qt::Key_AsciiTilde;
445         case XK_ENG: return Qt::Key_AsciiTilde;
446         case XK_eng: return Qt::Key_AsciiTilde;
447         case XK_Amacron: return Qt::Key_AsciiTilde;
448         case XK_Iogonek: return Qt::Key_AsciiTilde;
449         case XK_Eabovedot: return Qt::Key_AsciiTilde;
450         case XK_Imacron: return Qt::Key_AsciiTilde;
451         case XK_Ncedilla: return Qt::Key_AsciiTilde;
452         case XK_Omacron: return Qt::Key_AsciiTilde;
453         case XK_Kcedilla: return Qt::Key_AsciiTilde;
454         case XK_Uogonek: return Qt::Key_AsciiTilde;
455         case XK_Utilde: return Qt::Key_AsciiTilde;
456         case XK_Umacron: return Qt::Key_AsciiTilde;
457         case XK_amacron: return Qt::Key_AsciiTilde;
458         case XK_iogonek: return Qt::Key_AsciiTilde;
459         case XK_eabovedot: return Qt::Key_AsciiTilde;
460         case XK_imacron: return Qt::Key_AsciiTilde;
461         case XK_ncedilla: return Qt::Key_AsciiTilde;
462         case XK_omacron: return Qt::Key_AsciiTilde;
463         case XK_kcedilla: return Qt::Key_AsciiTilde;
464         case XK_uogonek: return Qt::Key_AsciiTilde;
465         case XK_utilde: return Qt::Key_AsciiTilde;
466         case XK_umacron: return Qt::Key_AsciiTilde;
467         case XK_Wcircumflex: return Qt::Key_AsciiTilde;
468         case XK_wcircumflex: return Qt::Key_AsciiTilde;
469         case XK_Ycircumflex: return Qt::Key_AsciiTilde;
470         case XK_ycircumflex: return Qt::Key_AsciiTilde;
471         case XK_Babovedot: return Qt::Key_AsciiTilde;
472         case XK_babovedot: return Qt::Key_AsciiTilde;
473         case XK_Dabovedot: return Qt::Key_AsciiTilde;
474         case XK_dabovedot: return Qt::Key_AsciiTilde;
475         case XK_Fabovedot: return Qt::Key_AsciiTilde;
476         case XK_fabovedot: return Qt::Key_AsciiTilde;
477         case XK_Mabovedot: return Qt::Key_AsciiTilde;
478         case XK_mabovedot: return Qt::Key_AsciiTilde;
479         case XK_Pabovedot: return Qt::Key_AsciiTilde;
480         case XK_pabovedot: return Qt::Key_AsciiTilde;
481         case XK_Sabovedot: return Qt::Key_AsciiTilde;
482         case XK_sabovedot: return Qt::Key_AsciiTilde;
483         case XK_Tabovedot: return Qt::Key_AsciiTilde;
484         case XK_tabovedot: return Qt::Key_AsciiTilde;
485         case XK_Wgrave: return Qt::Key_AsciiTilde;
486         case XK_wgrave: return Qt::Key_AsciiTilde;
487         case XK_Wacute: return Qt::Key_AsciiTilde;
488         case XK_wacute: return Qt::Key_AsciiTilde;
489         case XK_Wdiaeresis: return Qt::Key_AsciiTilde;
490         case XK_wdiaeresis: return Qt::Key_AsciiTilde;
491         case XK_Ygrave: return Qt::Key_AsciiTilde;
492         case XK_ygrave: return Qt::Key_AsciiTilde;
493         case XK_OE: return Qt::Key_AsciiTilde;
494         case XK_oe: return Qt::Key_AsciiTilde;
495         case XK_Ydiaeresis: return Qt::Key_AsciiTilde;*/
496 	default:
497 	  qDebug() << "Unknown Key";
498   }
499   qDebug() << " -- Simple Qt Map:" << (Qt::Key)(symbol);
500   qDebug() << " -- Key Sequence Map:" << QKeySequence(symbol);
501   qDebug() << " - Not implemented yet";
502   return Qt::Key_unknown;
503 }
504 
MouseToQt(int keycode)505 NativeWindowSystem::MouseButton NativeWindowSystem::MouseToQt(int keycode){
506   switch(keycode){
507      case  1:
508       return NativeWindowSystem::LeftButton;
509     case  3:
510       return NativeWindowSystem::RightButton;
511     case  2:
512       return NativeWindowSystem::MidButton;
513     case  4:
514       return NativeWindowSystem::WheelUp;
515     case  5:
516       return NativeWindowSystem::WheelDown;
517     case  6:
518       return NativeWindowSystem::WheelLeft;
519     case  7:
520       return NativeWindowSystem::WheelRight;
521     case  8:
522       return NativeWindowSystem::BackButton; //Not sure if this is correct yet (1/27/17)
523     case  9:
524       return NativeWindowSystem::ForwardButton; //Not sure if this is correct yet (1/27/17)
525     default:
526       return NativeWindowSystem::NoButton;
527   }
528 }
529