[macOS] Fix keyboard shortcuts on non QWERTY keyboard layouts.
This commit is contained in:
@ -461,99 +461,6 @@ const char *find_keycode_name(int p_keycode) {
|
||||
return "";
|
||||
}
|
||||
|
||||
struct _KeyCodeReplace {
|
||||
int from;
|
||||
int to;
|
||||
};
|
||||
|
||||
static const _KeyCodeReplace _keycode_replace_qwertz[] = {
|
||||
{ KEY_Y, KEY_Z },
|
||||
{ KEY_Z, KEY_Y },
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
static const _KeyCodeReplace _keycode_replace_azerty[] = {
|
||||
{ KEY_W, KEY_Z },
|
||||
{ KEY_Z, KEY_W },
|
||||
{ KEY_A, KEY_Q },
|
||||
{ KEY_Q, KEY_A },
|
||||
{ KEY_SEMICOLON, KEY_M },
|
||||
{ KEY_M, KEY_SEMICOLON },
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
static const _KeyCodeReplace _keycode_replace_qzerty[] = {
|
||||
{ KEY_W, KEY_Z },
|
||||
{ KEY_Z, KEY_W },
|
||||
{ KEY_SEMICOLON, KEY_M },
|
||||
{ KEY_M, KEY_SEMICOLON },
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
static const _KeyCodeReplace _keycode_replace_dvorak[] = {
|
||||
{ KEY_UNDERSCORE, KEY_BRACELEFT },
|
||||
{ KEY_EQUAL, KEY_BRACERIGHT },
|
||||
{ KEY_Q, KEY_APOSTROPHE },
|
||||
{ KEY_W, KEY_COMMA },
|
||||
{ KEY_E, KEY_PERIOD },
|
||||
{ KEY_R, KEY_P },
|
||||
{ KEY_T, KEY_Y },
|
||||
{ KEY_Y, KEY_F },
|
||||
{ KEY_U, KEY_G },
|
||||
{ KEY_I, KEY_C },
|
||||
{ KEY_O, KEY_R },
|
||||
{ KEY_P, KEY_L },
|
||||
{ KEY_BRACELEFT, KEY_SLASH },
|
||||
{ KEY_BRACERIGHT, KEY_EQUAL },
|
||||
{ KEY_A, KEY_A },
|
||||
{ KEY_S, KEY_O },
|
||||
{ KEY_D, KEY_E },
|
||||
{ KEY_F, KEY_U },
|
||||
{ KEY_G, KEY_I },
|
||||
{ KEY_H, KEY_D },
|
||||
{ KEY_J, KEY_H },
|
||||
{ KEY_K, KEY_T },
|
||||
{ KEY_L, KEY_N },
|
||||
{ KEY_SEMICOLON, KEY_S },
|
||||
{ KEY_APOSTROPHE, KEY_UNDERSCORE },
|
||||
{ KEY_Z, KEY_SEMICOLON },
|
||||
{ KEY_X, KEY_Q },
|
||||
{ KEY_C, KEY_J },
|
||||
{ KEY_V, KEY_K },
|
||||
{ KEY_B, KEY_X },
|
||||
{ KEY_N, KEY_B },
|
||||
{ KEY_M, KEY_M },
|
||||
{ KEY_COMMA, KEY_W },
|
||||
{ KEY_PERIOD, KEY_V },
|
||||
{ KEY_SLASH, KEY_Z },
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
static const _KeyCodeReplace _keycode_replace_neo[] = {
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
static const _KeyCodeReplace _keycode_replace_colemak[] = {
|
||||
{ KEY_E, KEY_F },
|
||||
{ KEY_R, KEY_P },
|
||||
{ KEY_T, KEY_G },
|
||||
{ KEY_Y, KEY_J },
|
||||
{ KEY_U, KEY_L },
|
||||
{ KEY_I, KEY_U },
|
||||
{ KEY_O, KEY_Y },
|
||||
{ KEY_P, KEY_SEMICOLON },
|
||||
{ KEY_S, KEY_R },
|
||||
{ KEY_D, KEY_S },
|
||||
{ KEY_F, KEY_T },
|
||||
{ KEY_G, KEY_D },
|
||||
{ KEY_J, KEY_N },
|
||||
{ KEY_K, KEY_E },
|
||||
{ KEY_L, KEY_I },
|
||||
{ KEY_SEMICOLON, KEY_O },
|
||||
{ KEY_N, KEY_K },
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
int keycode_get_count() {
|
||||
|
||||
const _KeyCodeText *kct = &_keycodes[0];
|
||||
@ -574,31 +481,3 @@ int keycode_get_value_by_index(int p_index) {
|
||||
const char *keycode_get_name_by_index(int p_index) {
|
||||
return _keycodes[p_index].text;
|
||||
}
|
||||
|
||||
int latin_keyboard_keycode_convert(int p_keycode) {
|
||||
|
||||
const _KeyCodeReplace *kcr = NULL;
|
||||
switch (OS::get_singleton()->get_latin_keyboard_variant()) {
|
||||
|
||||
case OS::LATIN_KEYBOARD_QWERTY: return p_keycode; break;
|
||||
case OS::LATIN_KEYBOARD_QWERTZ: kcr = _keycode_replace_qwertz; break;
|
||||
case OS::LATIN_KEYBOARD_AZERTY: kcr = _keycode_replace_azerty; break;
|
||||
case OS::LATIN_KEYBOARD_QZERTY: kcr = _keycode_replace_qzerty; break;
|
||||
case OS::LATIN_KEYBOARD_DVORAK: kcr = _keycode_replace_dvorak; break;
|
||||
case OS::LATIN_KEYBOARD_NEO: kcr = _keycode_replace_neo; break;
|
||||
case OS::LATIN_KEYBOARD_COLEMAK: kcr = _keycode_replace_colemak; break;
|
||||
default: return p_keycode;
|
||||
}
|
||||
|
||||
if (!kcr) {
|
||||
return p_keycode;
|
||||
}
|
||||
|
||||
while (kcr->from) {
|
||||
if (kcr->from == p_keycode)
|
||||
return kcr->to;
|
||||
kcr++;
|
||||
}
|
||||
|
||||
return p_keycode;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user