20#include <freerdp/config.h>
22#include "xkb_layout_ids.h"
29#include <freerdp/locale/keyboard.h>
34 INT64 keyboardLayoutID;
40 INT64 keyboardLayoutID;
41 const XKB_VARIANT* variants;
47static const XKB_VARIANT us_variants[] = {
50 {
"intl", KBD_UNITED_STATES_INTERNATIONAL },
52 KBD_UNITED_STATES_INTERNATIONAL },
54 {
"dvorak", KBD_UNITED_STATES_DVORAK },
55 {
"dvorak-intl", KBD_UNITED_STATES_DVORAK },
56 {
"dvorak-l", KBD_UNITED_STATES_DVORAK_FOR_LEFT_HAND },
57 {
"dvorak-r", KBD_UNITED_STATES_DVORAK_FOR_RIGHT_HAND },
58 {
"dvorak-classic", KBD_UNITED_STATES_DVORAK },
59 {
"dvp", KBD_UNITED_STATES_DVORAK_PROGRAMMER },
62 {
"altgr-intl", KBD_UNITED_STATES_INTERNATIONAL },
68static const XKB_VARIANT af_variants[] = {
70 {
"uz", KBD_UZBEK_CYRILLIC },
71 {
"olpc-ps", KBD_PASHTO },
73 {
"olpc-uz", KBD_UZBEK_CYRILLIC },
78static const XKB_VARIANT ara_variants[] = {
79 {
"azerty", KBD_ARABIC_102_AZERTY },
80 {
"azerty_digits", KBD_ARABIC_102_AZERTY },
81 {
"digits", KBD_ARABIC_102_AZERTY },
82 {
"qwerty", KBD_ARABIC_101 },
83 {
"qwerty_digits", KBD_ARABIC_101 },
84 {
"buckwalter", KBD_US_ENGLISH_TABLE_FOR_IBM_ARABIC_238_L },
89static const XKB_VARIANT am_variants[] = {
91 {
"phonetic-alt", 0 },
92 {
"eastern", KBD_ARMENIAN_EASTERN },
93 {
"western", KBD_ARMENIAN_WESTERN },
94 {
"eastern-alt", KBD_ARMENIAN_EASTERN },
99static const XKB_VARIANT az_variants[] = {
100 {
"cyrillic", KBD_AZERI_CYRILLIC },
105static const XKB_VARIANT by_variants[] = {
106 {
"winkeys", KBD_BELARUSIAN },
107 {
"latin", KBD_BELARUSIAN },
112static const XKB_VARIANT be_variants[] = {
113 {
"oss", KBD_BELGIAN_FRENCH },
114 {
"oss_latin9", KBD_BELGIAN_FRENCH },
115 {
"oss_sundeadkeys", KBD_BELGIAN_PERIOD },
116 {
"iso-alternate", KBD_BELGIAN_COMMA },
117 {
"nodeadkeys", KBD_BELGIAN_COMMA },
118 {
"sundeadkeys", KBD_BELGIAN_PERIOD },
119 {
"wang", KBD_BELGIAN_FRENCH },
124static const XKB_VARIANT bd_variants[] = {
125 {
"probhat", KBD_BENGALI_INSCRIPT },
130static const XKB_VARIANT in_variants[] = {
131 {
"ben", KBD_BENGALI },
132 {
"ben_probhat", KBD_BENGALI_INSCRIPT },
133 {
"guj", KBD_GUJARATI },
136 {
"kan", KBD_KANNADA },
137 {
"mal", KBD_MALAYALAM },
138 {
"mal_lalitha", KBD_MALAYALAM },
140 {
"tam_unicode", KBD_TAMIL },
141 {
"tam_TAB", KBD_TAMIL },
142 {
"tam_TSCII", KBD_TAMIL },
143 {
"tam", KBD_TAMIL },
144 {
"tel", KBD_TELUGU },
145 {
"urd-phonetic", KBD_URDU },
146 {
"urd-phonetic3", KBD_URDU },
147 {
"urd-winkeys", KBD_URDU },
148 {
"bolnagri", KBD_HINDI_TRADITIONAL },
149 {
"hin-wx", KBD_HINDI_TRADITIONAL },
154static const XKB_VARIANT ba_variants[] = {
155 {
"alternatequotes", KBD_BOSNIAN },
156 {
"unicode", KBD_BOSNIAN },
157 {
"unicodeus", KBD_BOSNIAN },
158 {
"us", KBD_BOSNIAN_CYRILLIC },
163static const XKB_VARIANT br_variants[] = {
164 {
"nodeadkeys", KBD_PORTUGUESE_BRAZILIAN_ABNT2 },
165 {
"dvorak", KBD_UNITED_STATES_DVORAK },
166 {
"nativo", KBD_PORTUGUESE_BRAZILIAN_ABNT2 },
167 {
"nativo-us", KBD_PORTUGUESE_BRAZILIAN_ABNT2 },
168 {
"nativo-epo", KBD_PORTUGUESE_BRAZILIAN_ABNT2 },
173static const XKB_VARIANT bg_variants[] = {
174 {
"phonetic", KBD_BULGARIAN_LATIN },
175 {
"bas_phonetic", KBD_BULGARIAN_LATIN },
180static const XKB_VARIANT ma_variants[] = {
181 {
"french", KBD_FRENCH },
183 {
"tifinagh-alt", 0 },
184 {
"tifinagh-alt-phonetic", 0 },
185 {
"tifinagh-extended", 0 },
186 {
"tifinagh-phonetic", 0 },
187 {
"tifinagh-extended-phonetic", 0 },
192static const XKB_VARIANT ca_variants[] = {
193 {
"fr", KBD_CANADIAN_FRENCH },
194 {
"fr-dvorak", KBD_UNITED_STATES_DVORAK },
195 {
"fr-legacy", KBD_CANADIAN_FRENCH_LEGACY },
196 {
"multix", KBD_CANADIAN_MULTILINGUAL_STANDARD },
197 {
"multi", KBD_CANADIAN_MULTILINGUAL_STANDARD },
198 {
"multi-2gr", KBD_CANADIAN_MULTILINGUAL_STANDARD },
199 {
"ike", KBD_INUKTITUT_LATIN },
206static const XKB_VARIANT cn_variants[] = {
208 {
"tib_asciinum", 0 },
213static const XKB_VARIANT hr_variants[] = {
214 {
"alternatequotes", KBD_CROATIAN },
215 {
"unicode", KBD_CROATIAN },
216 {
"unicodeus", KBD_CROATIAN },
217 {
"us", KBD_CROATIAN },
222static const XKB_VARIANT cz_variants[] = {
223 {
"bksl", KBD_CZECH_PROGRAMMERS },
224 {
"qwerty", KBD_CZECH_QWERTY },
225 {
"qwerty_bksl", KBD_CZECH_QWERTY },
226 {
"ucw", KBD_CZECH },
231static const XKB_VARIANT dk_variants[] = {
232 {
"nodeadkeys", KBD_DANISH },
233 {
"mac", KBD_DANISH },
234 {
"mac_nodeadkeys", KBD_DANISH },
235 {
"dvorak", KBD_UNITED_STATES_DVORAK },
240static const XKB_VARIANT nl_variants[] = {
241 {
"sundeadkeys", KBD_SWISS_FRENCH },
242 {
"mac", KBD_SWISS_FRENCH },
243 {
"std", KBD_SWISS_FRENCH },
248static const XKB_VARIANT ee_variants[] = {
249 {
"nodeadkeys", KBD_US },
250 {
"dvorak", KBD_UNITED_STATES_DVORAK },
251 {
"us", KBD_UNITED_STATES_INTERNATIONAL },
256static const XKB_VARIANT ir_variants[] = {
268static const XKB_VARIANT iq_variants[] = {
277static const XKB_VARIANT fo_variants[] = {
283static const XKB_VARIANT fi_variants[] = {
292static const XKB_VARIANT fr_variants[] = {
294 {
"sundeadkeys", 0 },
297 {
"oss_nodeadkeys", 0 },
298 {
"oss_sundeadkeys", 0 },
300 {
"latin9_nodeadkeys", 0 },
301 {
"latin9_sundeadkeys", 0 },
302 {
"bepo", KBD_FRENCH_BEPO },
303 {
"bepo_latin9", 0 },
313static const XKB_VARIANT gh_variants[] = {
324static const XKB_VARIANT ge_variants[] = {
333static const XKB_VARIANT de_variants[] = {
334 {
"deadacute", KBD_GERMAN },
335 {
"deadgraveacute", KBD_GERMAN },
336 {
"nodeadkeys", KBD_GERMAN },
337 {
"ro", KBD_GERMAN },
340 {
"dvorak", KBD_UNITED_STATES_DVORAK },
341 {
"sundeadkeys", KBD_GERMAN },
342 {
"neo", KBD_GERMAN_NEO },
343 {
"mac", KBD_GERMAN },
344 {
"mac_nodeadkeys", KBD_GERMAN },
345 {
"dsb", KBD_GERMAN },
346 {
"dsb_qwertz", KBD_GERMAN },
347 {
"qwerty", KBD_GERMAN_IBM },
352static const XKB_VARIANT gr_variants[] = {
353 {
"simple", KBD_GREEK_220 },
354 {
"extended", KBD_GREEK_319 },
355 {
"nodeadkeys", KBD_GREEK_319 },
356 {
"polytonic", KBD_GREEK_POLYTONIC },
361static const XKB_VARIANT hu_variants[] = {
362 {
"standard", KBD_HUNGARIAN_101_KEY },
363 {
"nodeadkeys", KBD_HUNGARIAN_101_KEY },
364 {
"qwerty", KBD_HUNGARIAN_101_KEY },
365 {
"101_qwertz_comma_dead", KBD_HUNGARIAN_101_KEY },
366 {
"101_qwertz_comma_nodead", KBD_HUNGARIAN_101_KEY },
367 {
"101_qwertz_dot_dead", KBD_HUNGARIAN_101_KEY },
368 {
"101_qwertz_dot_nodead", KBD_HUNGARIAN_101_KEY },
369 {
"101_qwerty_comma_dead", KBD_HUNGARIAN_101_KEY },
370 {
"101_qwerty_comma_nodead", KBD_HUNGARIAN_101_KEY },
371 {
"101_qwerty_dot_dead", KBD_HUNGARIAN_101_KEY },
372 {
"101_qwerty_dot_nodead", KBD_HUNGARIAN_101_KEY },
373 {
"102_qwertz_comma_dead", KBD_HUNGARIAN_101_KEY },
374 {
"102_qwertz_comma_nodead", KBD_HUNGARIAN_101_KEY },
375 {
"102_qwertz_dot_dead", KBD_HUNGARIAN_101_KEY },
376 {
"102_qwertz_dot_nodead", KBD_HUNGARIAN_101_KEY },
377 {
"102_qwerty_comma_dead", KBD_HUNGARIAN_101_KEY },
378 {
"102_qwerty_comma_nodead", KBD_HUNGARIAN_101_KEY },
379 {
"102_qwerty_dot_dead", KBD_HUNGARIAN_101_KEY },
380 {
"102_qwerty_dot_nodead", KBD_HUNGARIAN_101_KEY },
385static const XKB_VARIANT is_variants[] = {
386 {
"Sundeadkeys", KBD_ICELANDIC },
387 {
"nodeadkeys", KBD_ICELANDIC },
388 {
"mac", KBD_ICELANDIC },
389 {
"dvorak", KBD_UNITED_STATES_DVORAK },
394static const XKB_VARIANT il_variants[] = {
395 {
"lyx", KBD_HEBREW },
396 {
"phonetic", KBD_HEBREW },
397 {
"biblical", KBD_HEBREW },
402static const XKB_VARIANT it_variants[] = {
403 {
"nodeadkeys", KBD_ITALIAN_142 },
404 {
"mac", KBD_ITALIAN },
405 {
"geo", KBD_GEORGIAN },
410static const XKB_VARIANT jp_variants[] = {
411 {
"kana", KBD_JAPANESE_INPUT_SYSTEM_MS_IME2002 },
412 {
"OADG109A", KBD_JAPANESE_INPUT_SYSTEM_MS_IME2002 },
417static const XKB_VARIANT kg_variants[] = {
418 {
"phonetic", KBD_KYRGYZ_CYRILLIC },
423static const XKB_VARIANT kz_variants[] = {
424 {
"ruskaz", KBD_KAZAKH },
425 {
"kazrus", KBD_KAZAKH },
430static const XKB_VARIANT latam_variants[] = {
431 {
"nodeadkeys", KBD_LATIN_AMERICAN },
432 {
"deadtilde", KBD_LATIN_AMERICAN },
433 {
"sundeadkeys", KBD_LATIN_AMERICAN },
438static const XKB_VARIANT lt_variants[] = {
439 {
"std", KBD_LITHUANIAN },
440 {
"us", KBD_LITHUANIAN_IBM },
441 {
"ibm", KBD_LITHUANIAN_IBM },
442 {
"lekp", KBD_LITHUANIAN },
443 {
"lekpa", KBD_LITHUANIAN },
444 {
"balticplus", KBD_LITHUANIAN },
449static const XKB_VARIANT lv_variants[] = {
450 {
"apostrophe", KBD_LATVIAN },
451 {
"tilde", KBD_LATVIAN },
452 {
"fkey", KBD_LATVIAN },
457static const XKB_VARIANT me_variants[] = {
460 {
"latinunicode", 0 },
462 {
"latinunicodeyz", 0 },
463 {
"cyrillicalternatequotes", 0 },
464 {
"latinalternatequotes", 0 },
469static const XKB_VARIANT mk_variants[] = {
470 {
"nodeadkeys", KBD_FYRO_MACEDONIAN },
475static const XKB_VARIANT mt_variants[] = {
476 {
"us", KBD_MALTESE_48_KEY },
481static const XKB_VARIANT no_variants[] = {
482 {
"nodeadkeys", KBD_NORWEGIAN },
483 {
"dvorak", KBD_UNITED_STATES_DVORAK },
484 {
"smi", KBD_NORWEGIAN_WITH_SAMI },
485 {
"smi_nodeadkeys", KBD_SAMI_EXTENDED_NORWAY },
486 {
"mac", KBD_NORWEGIAN },
487 {
"mac_nodeadkeys", KBD_SAMI_EXTENDED_NORWAY },
492static const XKB_VARIANT pl_variants[] = {
493 {
"qwertz", KBD_POLISH_214 },
494 {
"dvorak", KBD_UNITED_STATES_DVORAK },
495 {
"dvorak_quotes", KBD_UNITED_STATES_DVORAK },
496 {
"dvorak_altquotes", KBD_UNITED_STATES_DVORAK },
498 {
"ru_phonetic_dvorak", KBD_UNITED_STATES_DVORAK },
503static const XKB_VARIANT pt_variants[] = {
504 {
"nodeadkeys", KBD_PORTUGUESE },
505 {
"sundeadkeys", KBD_PORTUGUESE },
506 {
"mac", KBD_PORTUGUESE },
507 {
"mac_nodeadkeys", KBD_PORTUGUESE },
508 {
"mac_sundeadkeys", KBD_PORTUGUESE },
509 {
"nativo", KBD_PORTUGUESE },
510 {
"nativo-us", KBD_PORTUGUESE },
511 {
"nativo-epo", KBD_PORTUGUESE },
516static const XKB_VARIANT ro_variants[] = {
517 {
"cedilla", KBD_ROMANIAN },
518 {
"std", KBD_ROMANIAN },
519 {
"std_cedilla", KBD_ROMANIAN },
520 {
"winkeys", KBD_ROMANIAN },
521 {
"crh_f", KBD_TURKISH_F },
522 {
"crh_alt", KBD_TURKISH_Q },
523 {
"crh_dobruca1", KBD_TATAR },
524 {
"crh_dobruca2", KBD_TATAR },
529static const XKB_VARIANT ru_variants[] = {
530 {
"phonetic", KBD_RUSSIAN },
531 {
"phonetic_winkeys", KBD_RUSSIAN },
532 {
"typewriter", KBD_RUSSIAN_TYPEWRITER },
533 {
"legacy", KBD_RUSSIAN },
548static const XKB_VARIANT rs_variants[] = {
549 {
"yz", KBD_SERBIAN_CYRILLIC },
550 {
"latin", KBD_SERBIAN_LATIN },
551 {
"latinunicode", KBD_SERBIAN_LATIN },
552 {
"latinyz", KBD_SERBIAN_LATIN },
553 {
"latinunicodeyz", KBD_SERBIAN_LATIN },
554 {
"alternatequotes", KBD_SERBIAN_CYRILLIC },
555 {
"latinalternatequotes", KBD_SERBIAN_LATIN },
560static const XKB_VARIANT si_variants[] = {
561 {
"alternatequotes", KBD_SLOVENIAN },
562 {
"us", KBD_UNITED_STATES_INTERNATIONAL },
567static const XKB_VARIANT sk_variants[] = {
568 {
"bksl", KBD_SLOVAK },
569 {
"qwerty", KBD_SLOVAK_QWERTY },
570 {
"qwerty_bksl", KBD_SLOVAK_QWERTY },
575static const XKB_VARIANT es_variants[] = {
576 {
"nodeadkeys", KBD_SPANISH_VARIATION },
577 {
"deadtilde", KBD_SPANISH_VARIATION },
578 {
"sundeadkeys", KBD_SPANISH },
579 {
"dvorak", KBD_UNITED_STATES_DVORAK },
580 {
"ast", KBD_SPANISH_VARIATION },
581 {
"cat", KBD_SPANISH_VARIATION },
582 {
"mac", KBD_SPANISH },
587static const XKB_VARIANT se_variants[] = {
588 {
"nodeadkeys", KBD_SWEDISH },
589 {
"dvorak", KBD_UNITED_STATES_DVORAK },
590 {
"rus", KBD_RUSSIAN },
591 {
"rus_nodeadkeys", KBD_RUSSIAN },
592 {
"smi", KBD_SWEDISH_WITH_SAMI },
593 {
"mac", KBD_SWEDISH },
594 {
"svdvorak", KBD_UNITED_STATES_DVORAK },
599static const XKB_VARIANT ch_variants[] = {
600 {
"de_nodeadkeys", KBD_SWISS_GERMAN },
601 {
"de_sundeadkeys", KBD_SWISS_GERMAN },
602 {
"fr", KBD_SWISS_FRENCH },
603 {
"fr_nodeadkeys", KBD_SWISS_FRENCH },
604 {
"fr_sundeadkeys", KBD_SWISS_FRENCH },
605 {
"fr_mac", KBD_SWISS_FRENCH },
606 {
"de_mac", KBD_SWISS_GERMAN },
611static const XKB_VARIANT sy_variants[] = {
612 {
"syc", KBD_SYRIAC },
613 {
"syc_phonetic", KBD_SYRIAC_PHONETIC },
621static const XKB_VARIANT tj_variants[] = {
627static const XKB_VARIANT lk_variants[] = {
628 {
"tam_unicode", KBD_TAMIL },
629 {
"tam_TAB", KBD_TAMIL },
634static const XKB_VARIANT th_variants[] = {
635 {
"tis", KBD_THAI_KEDMANEE_NON_SHIFTLOCK },
636 {
"pat", KBD_THAI_PATTACHOTE },
641static const XKB_VARIANT tr_variants[] = {
642 {
"f", KBD_TURKISH_F },
643 {
"alt", KBD_TURKISH_Q },
644 {
"sundeadkeys", KBD_TURKISH_F },
648 {
"intl", KBD_TURKISH_F },
649 {
"crh", KBD_TATAR },
650 {
"crh_f", KBD_TURKISH_F },
651 {
"crh_alt", KBD_TURKISH_Q },
656static const XKB_VARIANT ua_variants[] = {
657 {
"phonetic", KBD_UKRAINIAN },
658 {
"typewriter", KBD_UKRAINIAN },
659 {
"winkeys", KBD_UKRAINIAN },
660 {
"legacy", KBD_UKRAINIAN },
661 {
"rstu", KBD_UKRAINIAN },
662 {
"rstu_ru", KBD_UKRAINIAN },
663 {
"homophonic", KBD_UKRAINIAN },
664 {
"crh", KBD_TATAR },
665 {
"crh_f", KBD_TURKISH_F },
666 {
"crh_alt", KBD_TURKISH_Q },
671static const XKB_VARIANT gb_variants[] = {
672 {
"extd", KBD_UNITED_KINGDOM_EXTENDED },
673 {
"intl", KBD_UNITED_KINGDOM_EXTENDED },
674 {
"dvorak", KBD_UNITED_STATES_DVORAK },
675 {
"dvorakukp", KBD_UNITED_STATES_DVORAK },
676 {
"mac", KBD_UNITED_KINGDOM },
682static const XKB_VARIANT uz_variants[] = {
684 {
"crh", KBD_TATAR },
685 {
"crh_f", KBD_TURKISH_F },
686 {
"crh_alt", KBD_TURKISH_Q },
691static const XKB_VARIANT kr_variants[] = {
692 {
"kr104", KBD_KOREAN_INPUT_SYSTEM_IME_2000 },
697static const XKB_VARIANT ie_variants[] = {
698 {
"CloGaelach", KBD_GAELIC },
699 {
"UnicodeExpert", KBD_GAELIC },
700 {
"ogam", KBD_GAELIC },
701 {
"ogam_is434", KBD_GAELIC },
706static const XKB_VARIANT pk_variants[] = {
709 {
"ara", KBD_ARABIC_101 },
714static const XKB_VARIANT epo_variants[] = {
720static const XKB_VARIANT ng_variants[] = {
728static const XKB_VARIANT brai_variants[] = {
735static const XKB_VARIANT tm_variants[] = {
736 {
"alt", KBD_TURKISH_Q },
740static const XKB_LAYOUT xkbLayouts[] = {
741 {
"us", KBD_US, us_variants },
743 {
"af", KBD_FARSI, af_variants },
744 {
"ara", KBD_ARABIC_101, ara_variants },
746 {
"am", KBD_ARMENIAN_EASTERN, am_variants },
747 {
"az", KBD_AZERI_CYRILLIC, az_variants },
748 {
"by", KBD_BELARUSIAN, by_variants },
749 {
"be", KBD_BELGIAN_FRENCH, be_variants },
750 {
"bd", KBD_BENGALI, bd_variants },
751 {
"in", KBD_HINDI_TRADITIONAL, in_variants },
752 {
"ba", KBD_CROATIAN, ba_variants },
753 {
"br", KBD_PORTUGUESE_BRAZILIAN_ABNT, br_variants },
754 {
"bg", KBD_BULGARIAN_LATIN, bg_variants },
755 {
"ma", KBD_FRENCH, ma_variants },
757 {
"ca", KBD_US, ca_variants },
759 {
"cn", KBD_CHINESE_TRADITIONAL_PHONETIC, cn_variants },
760 {
"hr", KBD_CROATIAN, hr_variants },
761 {
"cz", KBD_CZECH, cz_variants },
762 {
"dk", KBD_DANISH, dk_variants },
763 {
"nl", KBD_DUTCH, nl_variants },
765 {
"ee", KBD_ESTONIAN, ee_variants },
766 {
"ir", 0, ir_variants },
767 {
"iq", 0, iq_variants },
768 {
"fo", 0, fo_variants },
769 {
"fi", KBD_FINNISH, fi_variants },
770 {
"fr", KBD_FRENCH, fr_variants },
771 {
"gh", 0, gh_variants },
773 {
"ge", KBD_GEORGIAN, ge_variants },
774 {
"at", KBD_GERMAN, de_variants },
775 {
"de", KBD_GERMAN, de_variants },
776 {
"gr", KBD_GREEK, gr_variants },
777 {
"hu", KBD_HUNGARIAN, hu_variants },
778 {
"is", KBD_ICELANDIC, is_variants },
779 {
"il", KBD_HEBREW, il_variants },
780 {
"it", KBD_ITALIAN, it_variants },
781 {
"jp", KBD_JAPANESE_INPUT_SYSTEM_MS_IME2002, jp_variants },
782 {
"kg", 0, kg_variants },
784 {
"kz", KBD_KAZAKH, kz_variants },
786 {
"latam", KBD_LATIN_AMERICAN, latam_variants },
787 {
"lt", KBD_LITHUANIAN, lt_variants },
788 {
"lv", KBD_LATVIAN, lv_variants },
789 {
"mao", KBD_MAORI, NULL },
790 {
"me", KBD_SERBIAN_LATIN, me_variants },
791 {
"mk", KBD_FYRO_MACEDONIAN, mk_variants },
792 {
"mt", KBD_MALTESE_48_KEY, mt_variants },
793 {
"mn", KBD_MONGOLIAN_CYRILLIC, NULL },
794 {
"no", KBD_NORWEGIAN, no_variants },
795 {
"pl", KBD_POLISH_PROGRAMMERS, pl_variants },
796 {
"pt", KBD_PORTUGUESE, pt_variants },
797 {
"ro", KBD_ROMANIAN, ro_variants },
798 {
"ru", KBD_RUSSIAN, ru_variants },
799 {
"rs", KBD_SERBIAN_LATIN, rs_variants },
800 {
"si", KBD_SLOVENIAN, si_variants },
801 {
"sk", KBD_SLOVAK, sk_variants },
802 {
"es", KBD_SPANISH, es_variants },
803 {
"se", KBD_SWEDISH, se_variants },
804 {
"ch", KBD_SWISS_GERMAN, ch_variants },
805 {
"sy", KBD_SYRIAC, sy_variants },
806 {
"tj", 0, tj_variants },
807 {
"lk", 0, lk_variants },
808 {
"th", KBD_THAI_KEDMANEE, th_variants },
809 {
"tr", KBD_TURKISH_Q, tr_variants },
810 {
"ua", KBD_UKRAINIAN, ua_variants },
811 {
"gb", KBD_UNITED_KINGDOM, gb_variants },
812 {
"uz", KBD_UZBEK_CYRILLIC, uz_variants },
813 {
"vn", KBD_VIETNAMESE, NULL },
814 {
"kr", KBD_KOREAN_INPUT_SYSTEM_IME_2000, kr_variants },
815 {
"ie", KBD_UNITED_KINGDOM, ie_variants },
816 {
"pk", 0, pk_variants },
818 {
"za", KBD_US, NULL },
819 {
"epo", 0, epo_variants },
820 {
"np", KBD_NEPALI, NULL },
821 {
"ng", 0, ng_variants },
824 {
"brai", 0, brai_variants },
825 {
"tm", KBD_TURKISH_Q, tm_variants },
828static uint32_t convert(int64_t val)
830 WINPR_ASSERT(val <= UINT32_MAX);
831 WINPR_ASSERT(val >= INT32_MIN);
832 return WINPR_CXX_COMPAT_CAST(uint32_t, val);
835static UINT32 find_keyboard_layout_variant(
const XKB_LAYOUT* layout,
const char* variant)
837 WINPR_ASSERT(layout);
838 WINPR_ASSERT(variant);
840 const XKB_VARIANT* variants = layout->variants;
843 const XKB_VARIANT* var = variants;
844 while (var->variant && (strlen(var->variant) != 0))
846 if (strcmp(var->variant, variant) == 0)
847 return convert(var->keyboardLayoutID);
852 return convert(layout->keyboardLayoutID);
855UINT32 xf_find_keyboard_layout_in_xorg_rules(
const char* layout,
const char* variant)
857 if ((layout == NULL) || (variant == NULL))
860 DEBUG_X11(
"xkbLayout: %s\txkbVariant: %s", layout, variant);
862 for (
size_t i = 0; i < ARRAYSIZE(xkbLayouts); i++)
864 const XKB_LAYOUT* cur = &xkbLayouts[i];
865 if (strcmp(cur->layout, layout) == 0)
866 return find_keyboard_layout_variant(cur, variant);