Unverified Commit 8c3b826e authored by Robert Ancell's avatar Robert Ancell Committed by GitHub

Support GTK keycodes (#59961)

parent 8ae71a0e
...@@ -49,6 +49,11 @@ Future<String> getGlfwKeyCodes() async { ...@@ -49,6 +49,11 @@ Future<String> getGlfwKeyCodes() async {
return await http.read(keyCodesUri); return await http.read(keyCodesUri);
} }
Future<String> getGtkKeyCodes() async {
final Uri keyCodesUri = Uri.parse('https://gitlab.gnome.org/GNOME/gtk/-/raw/master/gdk/gdkkeysyms.h');
return await http.read(keyCodesUri);
}
Future<void> main(List<String> rawArguments) async { Future<void> main(List<String> rawArguments) async {
final ArgParser argParser = ArgParser(); final ArgParser argParser = ArgParser();
argParser.addOption( argParser.addOption(
...@@ -90,6 +95,13 @@ Future<void> main(List<String> rawArguments) async { ...@@ -90,6 +95,13 @@ Future<void> main(List<String> rawArguments) async {
'If --glfw-keycodes is not specified, the input will be read from the ' 'If --glfw-keycodes is not specified, the input will be read from the '
'correct file in the GLFW github repository.', 'correct file in the GLFW github repository.',
); );
argParser.addOption(
'gtk-keycodes',
defaultsTo: null,
help: 'The path to where the GTK keycodes header file should be read. '
'If --gtk-keycodes is not specified, the input will be read from the '
'correct file in the GTK repository.',
);
argParser.addOption( argParser.addOption(
'windows-keycodes', 'windows-keycodes',
defaultsTo: null, defaultsTo: null,
...@@ -107,6 +119,11 @@ Future<void> main(List<String> rawArguments) async { ...@@ -107,6 +119,11 @@ Future<void> main(List<String> rawArguments) async {
defaultsTo: path.join(flutterRoot.path, 'dev', 'tools', 'gen_keycodes', 'data', 'key_name_to_glfw_name.json'), defaultsTo: path.join(flutterRoot.path, 'dev', 'tools', 'gen_keycodes', 'data', 'key_name_to_glfw_name.json'),
help: 'The path to where the GLFW keycode to DomKey mapping is.', help: 'The path to where the GLFW keycode to DomKey mapping is.',
); );
argParser.addOption(
'gtk-domkey',
defaultsTo: path.join(flutterRoot.path, 'dev', 'tools', 'gen_keycodes', 'data', 'key_name_to_gtk_name.json'),
help: 'The path to where the GTK keycode to DomKey mapping is.',
);
argParser.addOption( argParser.addOption(
'data', 'data',
defaultsTo: path.join(flutterRoot.path, 'dev', 'tools', 'gen_keycodes', 'data', 'key_data.json'), defaultsTo: path.join(flutterRoot.path, 'dev', 'tools', 'gen_keycodes', 'data', 'key_data.json'),
...@@ -187,6 +204,13 @@ Future<void> main(List<String> rawArguments) async { ...@@ -187,6 +204,13 @@ Future<void> main(List<String> rawArguments) async {
glfwKeyCodes = File(parsedArguments['glfw-keycodes'] as String).readAsStringSync(); glfwKeyCodes = File(parsedArguments['glfw-keycodes'] as String).readAsStringSync();
} }
String gtkKeyCodes;
if (parsedArguments['gtk-keycodes'] == null) {
gtkKeyCodes = await getGtkKeyCodes();
} else {
gtkKeyCodes = File(parsedArguments['gtk-keycodes'] as String).readAsStringSync();
}
String windowsKeyCodes; String windowsKeyCodes;
if (parsedArguments['windows-keycodes'] == null) { if (parsedArguments['windows-keycodes'] == null) {
windowsKeyCodes = await getWindowsKeyCodes(); windowsKeyCodes = await getWindowsKeyCodes();
...@@ -196,9 +220,10 @@ Future<void> main(List<String> rawArguments) async { ...@@ -196,9 +220,10 @@ Future<void> main(List<String> rawArguments) async {
final String windowsToDomKey = File(parsedArguments['windows-domkey'] as String).readAsStringSync(); final String windowsToDomKey = File(parsedArguments['windows-domkey'] as String).readAsStringSync();
final String glfwToDomKey = File(parsedArguments['glfw-domkey'] as String).readAsStringSync(); final String glfwToDomKey = File(parsedArguments['glfw-domkey'] as String).readAsStringSync();
final String gtkToDomKey = File(parsedArguments['gtk-domkey'] as String).readAsStringSync();
final String androidToDomKey = File(parsedArguments['android-domkey'] as String).readAsStringSync(); final String androidToDomKey = File(parsedArguments['android-domkey'] as String).readAsStringSync();
data = KeyData(hidCodes, androidScanCodes, androidKeyCodes, androidToDomKey, glfwKeyCodes, glfwToDomKey, windowsKeyCodes, windowsToDomKey); data = KeyData(hidCodes, androidScanCodes, androidKeyCodes, androidToDomKey, glfwKeyCodes, glfwToDomKey, gtkKeyCodes, gtkToDomKey, windowsKeyCodes, windowsToDomKey);
const JsonEncoder encoder = JsonEncoder.withIndent(' '); const JsonEncoder encoder = JsonEncoder.withIndent(' ');
File(parsedArguments['data'] as String).writeAsStringSync(encoder.convert(data.toJson())); File(parsedArguments['data'] as String).writeAsStringSync(encoder.convert(data.toJson()));
...@@ -221,7 +246,7 @@ Future<void> main(List<String> rawArguments) async { ...@@ -221,7 +246,7 @@ Future<void> main(List<String> rawArguments) async {
await mapsFile.writeAsString(generator.generateKeyboardMaps()); await mapsFile.writeAsString(generator.generateKeyboardMaps());
final CcCodeGenerator ccCodeGenerator = CcCodeGenerator(data); final CcCodeGenerator ccCodeGenerator = CcCodeGenerator(data);
for (final String platform in <String>['android', 'darwin', 'glfw', 'fuchsia', 'linux', 'windows']) { for (final String platform in <String>['android', 'darwin', 'glfw', 'gtk', 'fuchsia', 'linux', 'windows']) {
final File platformFile = File(path.join(flutterRoot.path, '..', path.join('engine', 'src', 'flutter', 'shell', 'platform', platform, 'keycodes', 'keyboard_map_$platform.h'))); final File platformFile = File(path.join(flutterRoot.path, '..', path.join('engine', 'src', 'flutter', 'shell', 'platform', platform, 'keycodes', 'keyboard_map_$platform.h')));
if (!platformFile.existsSync()) { if (!platformFile.existsSync()) {
platformFile.createSync(recursive: true); platformFile.createSync(recursive: true);
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
"english": "None", "english": "None",
"chromium": "none", "chromium": "none",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -23,6 +24,7 @@ ...@@ -23,6 +24,7 @@
0 0
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -33,6 +35,10 @@ ...@@ -33,6 +35,10 @@
"english": "Hyper", "english": "Hyper",
"chromium": "hyper", "chromium": "hyper",
"glfw": null, "glfw": null,
"gtk": [
"Hyper_L",
"Hyper_R"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -46,6 +52,10 @@ ...@@ -46,6 +52,10 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
65517,
65518
],
"windows": null "windows": null
} }
}, },
...@@ -56,6 +66,10 @@ ...@@ -56,6 +66,10 @@
"english": "Super Key", "english": "Super Key",
"chromium": "super", "chromium": "super",
"glfw": null, "glfw": null,
"gtk": [
"Super_L",
"Super_R"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -69,6 +83,10 @@ ...@@ -69,6 +83,10 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
65515,
65516
],
"windows": null "windows": null
} }
}, },
...@@ -79,6 +97,7 @@ ...@@ -79,6 +97,7 @@
"english": "Fn Lock", "english": "Fn Lock",
"chromium": "fnLock", "chromium": "fnLock",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -92,6 +111,7 @@ ...@@ -92,6 +111,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -104,6 +124,9 @@ ...@@ -104,6 +124,9 @@
"english": "Suspend", "english": "Suspend",
"chromium": "suspend", "chromium": "suspend",
"glfw": null, "glfw": null,
"gtk": [
"Suspend"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -119,6 +142,9 @@ ...@@ -119,6 +142,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
269025191
],
"windows": null "windows": null
} }
}, },
...@@ -129,6 +155,9 @@ ...@@ -129,6 +155,9 @@
"english": "Resume", "english": "Resume",
"chromium": "resume", "chromium": "resume",
"glfw": null, "glfw": null,
"gtk": [
"Resume"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -142,6 +171,7 @@ ...@@ -142,6 +171,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -152,6 +182,7 @@ ...@@ -152,6 +182,7 @@
"english": "Turbo", "english": "Turbo",
"chromium": "turbo", "chromium": "turbo",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -165,6 +196,7 @@ ...@@ -165,6 +196,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -175,6 +207,7 @@ ...@@ -175,6 +207,7 @@
"english": "Privacy Screen Toggle", "english": "Privacy Screen Toggle",
"chromium": "privacyScreenToggle", "chromium": "privacyScreenToggle",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -188,6 +221,7 @@ ...@@ -188,6 +221,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -200,6 +234,9 @@ ...@@ -200,6 +234,9 @@
"english": "Sleep", "english": "Sleep",
"chromium": "sleep", "chromium": "sleep",
"glfw": null, "glfw": null,
"gtk": [
"Sleep"
],
"windows": [ "windows": [
"SLEEP" "SLEEP"
] ]
...@@ -219,6 +256,9 @@ ...@@ -219,6 +256,9 @@
223 223
], ],
"glfw": null, "glfw": null,
"gtk": [
269025071
],
"windows": [ "windows": [
95 95
] ]
...@@ -233,6 +273,9 @@ ...@@ -233,6 +273,9 @@
"english": "Wake Up", "english": "Wake Up",
"chromium": "wakeUp", "chromium": "wakeUp",
"glfw": null, "glfw": null,
"gtk": [
"WakeUp"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -250,6 +293,9 @@ ...@@ -250,6 +293,9 @@
224 224
], ],
"glfw": null, "glfw": null,
"gtk": [
269025067
],
"windows": null "windows": null
} }
}, },
...@@ -260,6 +306,7 @@ ...@@ -260,6 +306,7 @@
"english": "Display Toggle Int Ext", "english": "Display Toggle Int Ext",
"chromium": "displayToggleIntExt", "chromium": "displayToggleIntExt",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -273,6 +320,7 @@ ...@@ -273,6 +320,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -283,6 +331,7 @@ ...@@ -283,6 +331,7 @@
"english": "Usb Reserved", "english": "Usb Reserved",
"chromium": "usbReserved", "chromium": "usbReserved",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -296,6 +345,7 @@ ...@@ -296,6 +345,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -306,6 +356,7 @@ ...@@ -306,6 +356,7 @@
"english": "Usb Error Roll Over", "english": "Usb Error Roll Over",
"chromium": "usbErrorRollOver", "chromium": "usbErrorRollOver",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -319,6 +370,7 @@ ...@@ -319,6 +370,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -329,6 +381,7 @@ ...@@ -329,6 +381,7 @@
"english": "Usb Post Fail", "english": "Usb Post Fail",
"chromium": "usbPostFail", "chromium": "usbPostFail",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -342,6 +395,7 @@ ...@@ -342,6 +395,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -352,6 +406,7 @@ ...@@ -352,6 +406,7 @@
"english": "Usb Error Undefined", "english": "Usb Error Undefined",
"chromium": "usbErrorUndefined", "chromium": "usbErrorUndefined",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -365,6 +420,7 @@ ...@@ -365,6 +420,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -379,6 +435,9 @@ ...@@ -379,6 +435,9 @@
"glfw": [ "glfw": [
"A" "A"
], ],
"gtk": [
"A"
],
"windows": [ "windows": [
"A" "A"
] ]
...@@ -400,6 +459,9 @@ ...@@ -400,6 +459,9 @@
"glfw": [ "glfw": [
65 65
], ],
"gtk": [
65
],
"windows": [ "windows": [
65 65
] ]
...@@ -416,6 +478,9 @@ ...@@ -416,6 +478,9 @@
"glfw": [ "glfw": [
"B" "B"
], ],
"gtk": [
"B"
],
"windows": [ "windows": [
"B" "B"
] ]
...@@ -437,6 +502,9 @@ ...@@ -437,6 +502,9 @@
"glfw": [ "glfw": [
66 66
], ],
"gtk": [
66
],
"windows": [ "windows": [
66 66
] ]
...@@ -453,6 +521,9 @@ ...@@ -453,6 +521,9 @@
"glfw": [ "glfw": [
"C" "C"
], ],
"gtk": [
"C"
],
"windows": [ "windows": [
"C" "C"
] ]
...@@ -474,6 +545,9 @@ ...@@ -474,6 +545,9 @@
"glfw": [ "glfw": [
67 67
], ],
"gtk": [
67
],
"windows": [ "windows": [
67 67
] ]
...@@ -490,6 +564,9 @@ ...@@ -490,6 +564,9 @@
"glfw": [ "glfw": [
"D" "D"
], ],
"gtk": [
"D"
],
"windows": [ "windows": [
"D" "D"
] ]
...@@ -511,6 +588,9 @@ ...@@ -511,6 +588,9 @@
"glfw": [ "glfw": [
68 68
], ],
"gtk": [
68
],
"windows": [ "windows": [
68 68
] ]
...@@ -527,6 +607,9 @@ ...@@ -527,6 +607,9 @@
"glfw": [ "glfw": [
"E" "E"
], ],
"gtk": [
"E"
],
"windows": [ "windows": [
"E" "E"
] ]
...@@ -548,6 +631,9 @@ ...@@ -548,6 +631,9 @@
"glfw": [ "glfw": [
69 69
], ],
"gtk": [
69
],
"windows": [ "windows": [
69 69
] ]
...@@ -564,6 +650,9 @@ ...@@ -564,6 +650,9 @@
"glfw": [ "glfw": [
"F" "F"
], ],
"gtk": [
"F"
],
"windows": [ "windows": [
"F" "F"
] ]
...@@ -585,6 +674,9 @@ ...@@ -585,6 +674,9 @@
"glfw": [ "glfw": [
70 70
], ],
"gtk": [
70
],
"windows": [ "windows": [
70 70
] ]
...@@ -601,6 +693,9 @@ ...@@ -601,6 +693,9 @@
"glfw": [ "glfw": [
"G" "G"
], ],
"gtk": [
"G"
],
"windows": [ "windows": [
"G" "G"
] ]
...@@ -622,6 +717,9 @@ ...@@ -622,6 +717,9 @@
"glfw": [ "glfw": [
71 71
], ],
"gtk": [
71
],
"windows": [ "windows": [
71 71
] ]
...@@ -638,6 +736,9 @@ ...@@ -638,6 +736,9 @@
"glfw": [ "glfw": [
"H" "H"
], ],
"gtk": [
"H"
],
"windows": [ "windows": [
"H" "H"
] ]
...@@ -659,6 +760,9 @@ ...@@ -659,6 +760,9 @@
"glfw": [ "glfw": [
72 72
], ],
"gtk": [
72
],
"windows": [ "windows": [
72 72
] ]
...@@ -675,6 +779,9 @@ ...@@ -675,6 +779,9 @@
"glfw": [ "glfw": [
"I" "I"
], ],
"gtk": [
"I"
],
"windows": [ "windows": [
"I" "I"
] ]
...@@ -696,6 +803,9 @@ ...@@ -696,6 +803,9 @@
"glfw": [ "glfw": [
73 73
], ],
"gtk": [
73
],
"windows": [ "windows": [
73 73
] ]
...@@ -712,6 +822,9 @@ ...@@ -712,6 +822,9 @@
"glfw": [ "glfw": [
"J" "J"
], ],
"gtk": [
"J"
],
"windows": [ "windows": [
"J" "J"
] ]
...@@ -733,6 +846,9 @@ ...@@ -733,6 +846,9 @@
"glfw": [ "glfw": [
74 74
], ],
"gtk": [
74
],
"windows": [ "windows": [
74 74
] ]
...@@ -749,6 +865,9 @@ ...@@ -749,6 +865,9 @@
"glfw": [ "glfw": [
"K" "K"
], ],
"gtk": [
"K"
],
"windows": [ "windows": [
"K" "K"
] ]
...@@ -770,6 +889,9 @@ ...@@ -770,6 +889,9 @@
"glfw": [ "glfw": [
75 75
], ],
"gtk": [
75
],
"windows": [ "windows": [
75 75
] ]
...@@ -786,6 +908,9 @@ ...@@ -786,6 +908,9 @@
"glfw": [ "glfw": [
"L" "L"
], ],
"gtk": [
"L"
],
"windows": [ "windows": [
"L" "L"
] ]
...@@ -807,6 +932,9 @@ ...@@ -807,6 +932,9 @@
"glfw": [ "glfw": [
76 76
], ],
"gtk": [
76
],
"windows": [ "windows": [
76 76
] ]
...@@ -823,6 +951,9 @@ ...@@ -823,6 +951,9 @@
"glfw": [ "glfw": [
"M" "M"
], ],
"gtk": [
"M"
],
"windows": [ "windows": [
"M" "M"
] ]
...@@ -844,6 +975,9 @@ ...@@ -844,6 +975,9 @@
"glfw": [ "glfw": [
77 77
], ],
"gtk": [
77
],
"windows": [ "windows": [
77 77
] ]
...@@ -860,6 +994,9 @@ ...@@ -860,6 +994,9 @@
"glfw": [ "glfw": [
"N" "N"
], ],
"gtk": [
"N"
],
"windows": [ "windows": [
"N" "N"
] ]
...@@ -881,6 +1018,9 @@ ...@@ -881,6 +1018,9 @@
"glfw": [ "glfw": [
78 78
], ],
"gtk": [
78
],
"windows": [ "windows": [
78 78
] ]
...@@ -897,6 +1037,9 @@ ...@@ -897,6 +1037,9 @@
"glfw": [ "glfw": [
"O" "O"
], ],
"gtk": [
"O"
],
"windows": [ "windows": [
"O" "O"
] ]
...@@ -918,6 +1061,9 @@ ...@@ -918,6 +1061,9 @@
"glfw": [ "glfw": [
79 79
], ],
"gtk": [
79
],
"windows": [ "windows": [
79 79
] ]
...@@ -934,6 +1080,9 @@ ...@@ -934,6 +1080,9 @@
"glfw": [ "glfw": [
"P" "P"
], ],
"gtk": [
"P"
],
"windows": [ "windows": [
"P" "P"
] ]
...@@ -955,6 +1104,9 @@ ...@@ -955,6 +1104,9 @@
"glfw": [ "glfw": [
80 80
], ],
"gtk": [
80
],
"windows": [ "windows": [
80 80
] ]
...@@ -971,6 +1123,9 @@ ...@@ -971,6 +1123,9 @@
"glfw": [ "glfw": [
"Q" "Q"
], ],
"gtk": [
"Q"
],
"windows": [ "windows": [
"Q" "Q"
] ]
...@@ -992,6 +1147,9 @@ ...@@ -992,6 +1147,9 @@
"glfw": [ "glfw": [
81 81
], ],
"gtk": [
81
],
"windows": [ "windows": [
81 81
] ]
...@@ -1008,6 +1166,9 @@ ...@@ -1008,6 +1166,9 @@
"glfw": [ "glfw": [
"R" "R"
], ],
"gtk": [
"R"
],
"windows": [ "windows": [
"R" "R"
] ]
...@@ -1029,6 +1190,9 @@ ...@@ -1029,6 +1190,9 @@
"glfw": [ "glfw": [
82 82
], ],
"gtk": [
82
],
"windows": [ "windows": [
82 82
] ]
...@@ -1045,6 +1209,9 @@ ...@@ -1045,6 +1209,9 @@
"glfw": [ "glfw": [
"S" "S"
], ],
"gtk": [
"S"
],
"windows": [ "windows": [
"S" "S"
] ]
...@@ -1066,6 +1233,9 @@ ...@@ -1066,6 +1233,9 @@
"glfw": [ "glfw": [
83 83
], ],
"gtk": [
83
],
"windows": [ "windows": [
83 83
] ]
...@@ -1082,6 +1252,9 @@ ...@@ -1082,6 +1252,9 @@
"glfw": [ "glfw": [
"T" "T"
], ],
"gtk": [
"T"
],
"windows": [ "windows": [
"T" "T"
] ]
...@@ -1103,6 +1276,9 @@ ...@@ -1103,6 +1276,9 @@
"glfw": [ "glfw": [
84 84
], ],
"gtk": [
84
],
"windows": [ "windows": [
84 84
] ]
...@@ -1119,6 +1295,9 @@ ...@@ -1119,6 +1295,9 @@
"glfw": [ "glfw": [
"U" "U"
], ],
"gtk": [
"U"
],
"windows": [ "windows": [
"U" "U"
] ]
...@@ -1140,6 +1319,9 @@ ...@@ -1140,6 +1319,9 @@
"glfw": [ "glfw": [
85 85
], ],
"gtk": [
85
],
"windows": [ "windows": [
85 85
] ]
...@@ -1156,6 +1338,9 @@ ...@@ -1156,6 +1338,9 @@
"glfw": [ "glfw": [
"V" "V"
], ],
"gtk": [
"V"
],
"windows": [ "windows": [
"V" "V"
] ]
...@@ -1177,6 +1362,9 @@ ...@@ -1177,6 +1362,9 @@
"glfw": [ "glfw": [
86 86
], ],
"gtk": [
86
],
"windows": [ "windows": [
86 86
] ]
...@@ -1193,6 +1381,9 @@ ...@@ -1193,6 +1381,9 @@
"glfw": [ "glfw": [
"W" "W"
], ],
"gtk": [
"W"
],
"windows": [ "windows": [
"W" "W"
] ]
...@@ -1214,6 +1405,9 @@ ...@@ -1214,6 +1405,9 @@
"glfw": [ "glfw": [
87 87
], ],
"gtk": [
87
],
"windows": [ "windows": [
87 87
] ]
...@@ -1230,6 +1424,9 @@ ...@@ -1230,6 +1424,9 @@
"glfw": [ "glfw": [
"X" "X"
], ],
"gtk": [
"X"
],
"windows": [ "windows": [
"X" "X"
] ]
...@@ -1251,6 +1448,9 @@ ...@@ -1251,6 +1448,9 @@
"glfw": [ "glfw": [
88 88
], ],
"gtk": [
88
],
"windows": [ "windows": [
88 88
] ]
...@@ -1267,6 +1467,9 @@ ...@@ -1267,6 +1467,9 @@
"glfw": [ "glfw": [
"Y" "Y"
], ],
"gtk": [
"Y"
],
"windows": [ "windows": [
"Y" "Y"
] ]
...@@ -1288,6 +1491,9 @@ ...@@ -1288,6 +1491,9 @@
"glfw": [ "glfw": [
89 89
], ],
"gtk": [
89
],
"windows": [ "windows": [
89 89
] ]
...@@ -1304,6 +1510,9 @@ ...@@ -1304,6 +1510,9 @@
"glfw": [ "glfw": [
"Z" "Z"
], ],
"gtk": [
"Z"
],
"windows": [ "windows": [
"Z" "Z"
] ]
...@@ -1325,6 +1534,9 @@ ...@@ -1325,6 +1534,9 @@
"glfw": [ "glfw": [
90 90
], ],
"gtk": [
90
],
"windows": [ "windows": [
90 90
] ]
...@@ -1341,6 +1553,9 @@ ...@@ -1341,6 +1553,9 @@
"glfw": [ "glfw": [
"1" "1"
], ],
"gtk": [
"1"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -1360,6 +1575,9 @@ ...@@ -1360,6 +1575,9 @@
"glfw": [ "glfw": [
49 49
], ],
"gtk": [
49
],
"windows": null "windows": null
} }
}, },
...@@ -1374,6 +1592,9 @@ ...@@ -1374,6 +1592,9 @@
"glfw": [ "glfw": [
"2" "2"
], ],
"gtk": [
"2"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -1393,6 +1614,9 @@ ...@@ -1393,6 +1614,9 @@
"glfw": [ "glfw": [
50 50
], ],
"gtk": [
50
],
"windows": null "windows": null
} }
}, },
...@@ -1407,6 +1631,9 @@ ...@@ -1407,6 +1631,9 @@
"glfw": [ "glfw": [
"3" "3"
], ],
"gtk": [
"3"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -1426,6 +1653,9 @@ ...@@ -1426,6 +1653,9 @@
"glfw": [ "glfw": [
51 51
], ],
"gtk": [
51
],
"windows": null "windows": null
} }
}, },
...@@ -1440,6 +1670,9 @@ ...@@ -1440,6 +1670,9 @@
"glfw": [ "glfw": [
"4" "4"
], ],
"gtk": [
"4"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -1459,6 +1692,9 @@ ...@@ -1459,6 +1692,9 @@
"glfw": [ "glfw": [
52 52
], ],
"gtk": [
52
],
"windows": null "windows": null
} }
}, },
...@@ -1473,6 +1709,9 @@ ...@@ -1473,6 +1709,9 @@
"glfw": [ "glfw": [
"5" "5"
], ],
"gtk": [
"5"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -1492,6 +1731,9 @@ ...@@ -1492,6 +1731,9 @@
"glfw": [ "glfw": [
53 53
], ],
"gtk": [
53
],
"windows": null "windows": null
} }
}, },
...@@ -1506,6 +1748,9 @@ ...@@ -1506,6 +1748,9 @@
"glfw": [ "glfw": [
"6" "6"
], ],
"gtk": [
"6"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -1525,6 +1770,9 @@ ...@@ -1525,6 +1770,9 @@
"glfw": [ "glfw": [
54 54
], ],
"gtk": [
54
],
"windows": null "windows": null
} }
}, },
...@@ -1539,6 +1787,9 @@ ...@@ -1539,6 +1787,9 @@
"glfw": [ "glfw": [
"7" "7"
], ],
"gtk": [
"7"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -1558,6 +1809,9 @@ ...@@ -1558,6 +1809,9 @@
"glfw": [ "glfw": [
55 55
], ],
"gtk": [
55
],
"windows": null "windows": null
} }
}, },
...@@ -1572,6 +1826,9 @@ ...@@ -1572,6 +1826,9 @@
"glfw": [ "glfw": [
"8" "8"
], ],
"gtk": [
"8"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -1591,6 +1848,9 @@ ...@@ -1591,6 +1848,9 @@
"glfw": [ "glfw": [
56 56
], ],
"gtk": [
56
],
"windows": null "windows": null
} }
}, },
...@@ -1605,6 +1865,9 @@ ...@@ -1605,6 +1865,9 @@
"glfw": [ "glfw": [
"9" "9"
], ],
"gtk": [
"9"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -1624,6 +1887,9 @@ ...@@ -1624,6 +1887,9 @@
"glfw": [ "glfw": [
57 57
], ],
"gtk": [
57
],
"windows": null "windows": null
} }
}, },
...@@ -1638,6 +1904,9 @@ ...@@ -1638,6 +1904,9 @@
"glfw": [ "glfw": [
"0" "0"
], ],
"gtk": [
"0"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -1657,6 +1926,9 @@ ...@@ -1657,6 +1926,9 @@
"glfw": [ "glfw": [
48 48
], ],
"gtk": [
48
],
"windows": null "windows": null
} }
}, },
...@@ -1671,6 +1943,10 @@ ...@@ -1671,6 +1943,10 @@
"glfw": [ "glfw": [
"ENTER" "ENTER"
], ],
"gtk": [
"Return",
"Enter"
],
"windows": [ "windows": [
"RETURN" "RETURN"
] ]
...@@ -1692,6 +1968,9 @@ ...@@ -1692,6 +1968,9 @@
"glfw": [ "glfw": [
257 257
], ],
"gtk": [
65293
],
"windows": [ "windows": [
13 13
] ]
...@@ -1708,6 +1987,9 @@ ...@@ -1708,6 +1987,9 @@
"glfw": [ "glfw": [
"ESCAPE" "ESCAPE"
], ],
"gtk": [
"Escape"
],
"windows": [ "windows": [
"ESCAPE" "ESCAPE"
] ]
...@@ -1729,6 +2011,9 @@ ...@@ -1729,6 +2011,9 @@
"glfw": [ "glfw": [
256 256
], ],
"gtk": [
65307
],
"windows": [ "windows": [
27 27
] ]
...@@ -1745,6 +2030,9 @@ ...@@ -1745,6 +2030,9 @@
"glfw": [ "glfw": [
"BACKSPACE" "BACKSPACE"
], ],
"gtk": [
"BackSpace"
],
"windows": [ "windows": [
"BACK" "BACK"
] ]
...@@ -1766,6 +2054,9 @@ ...@@ -1766,6 +2054,9 @@
"glfw": [ "glfw": [
259 259
], ],
"gtk": [
65288
],
"windows": [ "windows": [
8 8
] ]
...@@ -1782,6 +2073,10 @@ ...@@ -1782,6 +2073,10 @@
"glfw": [ "glfw": [
"TAB" "TAB"
], ],
"gtk": [
"Tab",
"KP_Tab"
],
"windows": [ "windows": [
"TAB" "TAB"
] ]
...@@ -1803,6 +2098,10 @@ ...@@ -1803,6 +2098,10 @@
"glfw": [ "glfw": [
258 258
], ],
"gtk": [
65289,
65417
],
"windows": [ "windows": [
9 9
] ]
...@@ -1819,6 +2118,10 @@ ...@@ -1819,6 +2118,10 @@
"glfw": [ "glfw": [
"SPACE" "SPACE"
], ],
"gtk": [
"space",
"KP_Space"
],
"windows": [ "windows": [
"SPACE" "SPACE"
] ]
...@@ -1840,6 +2143,10 @@ ...@@ -1840,6 +2143,10 @@
"glfw": [ "glfw": [
32 32
], ],
"gtk": [
32,
65408
],
"windows": [ "windows": [
32 32
] ]
...@@ -1856,6 +2163,9 @@ ...@@ -1856,6 +2163,9 @@
"glfw": [ "glfw": [
"MINUS" "MINUS"
], ],
"gtk": [
"minus"
],
"windows": [ "windows": [
"OEM_MINUS" "OEM_MINUS"
] ]
...@@ -1877,6 +2187,9 @@ ...@@ -1877,6 +2187,9 @@
"glfw": [ "glfw": [
45 45
], ],
"gtk": [
45
],
"windows": [ "windows": [
189 189
] ]
...@@ -1893,6 +2206,9 @@ ...@@ -1893,6 +2206,9 @@
"glfw": [ "glfw": [
"EQUAL" "EQUAL"
], ],
"gtk": [
"equal"
],
"windows": [ "windows": [
"OEM_PLUS" "OEM_PLUS"
] ]
...@@ -1914,6 +2230,9 @@ ...@@ -1914,6 +2230,9 @@
"glfw": [ "glfw": [
61 61
], ],
"gtk": [
61
],
"windows": [ "windows": [
187 187
] ]
...@@ -1930,6 +2249,9 @@ ...@@ -1930,6 +2249,9 @@
"glfw": [ "glfw": [
"LEFT_BRACKET" "LEFT_BRACKET"
], ],
"gtk": [
"bracketleft"
],
"windows": [ "windows": [
"OEM_4" "OEM_4"
] ]
...@@ -1951,6 +2273,9 @@ ...@@ -1951,6 +2273,9 @@
"glfw": [ "glfw": [
91 91
], ],
"gtk": [
91
],
"windows": [ "windows": [
219 219
] ]
...@@ -1967,6 +2292,9 @@ ...@@ -1967,6 +2292,9 @@
"glfw": [ "glfw": [
"RIGHT_BRACKET" "RIGHT_BRACKET"
], ],
"gtk": [
"bracketright"
],
"windows": [ "windows": [
"OEM_6" "OEM_6"
] ]
...@@ -1988,6 +2316,9 @@ ...@@ -1988,6 +2316,9 @@
"glfw": [ "glfw": [
93 93
], ],
"gtk": [
93
],
"windows": [ "windows": [
221 221
] ]
...@@ -2004,6 +2335,9 @@ ...@@ -2004,6 +2335,9 @@
"glfw": [ "glfw": [
"BACKSLASH" "BACKSLASH"
], ],
"gtk": [
"backslash"
],
"windows": [ "windows": [
"OEM_5" "OEM_5"
] ]
...@@ -2026,6 +2360,9 @@ ...@@ -2026,6 +2360,9 @@
"glfw": [ "glfw": [
92 92
], ],
"gtk": [
92
],
"windows": [ "windows": [
220 220
] ]
...@@ -2042,6 +2379,9 @@ ...@@ -2042,6 +2379,9 @@
"glfw": [ "glfw": [
"SEMICOLON" "SEMICOLON"
], ],
"gtk": [
"semicolon"
],
"windows": [ "windows": [
"OEM_1" "OEM_1"
] ]
...@@ -2063,6 +2403,9 @@ ...@@ -2063,6 +2403,9 @@
"glfw": [ "glfw": [
59 59
], ],
"gtk": [
59
],
"windows": [ "windows": [
186 186
] ]
...@@ -2079,6 +2422,9 @@ ...@@ -2079,6 +2422,9 @@
"glfw": [ "glfw": [
"APOSTROPHE" "APOSTROPHE"
], ],
"gtk": [
"apostrophe"
],
"windows": [ "windows": [
"OEM_7" "OEM_7"
] ]
...@@ -2100,6 +2446,9 @@ ...@@ -2100,6 +2446,9 @@
"glfw": [ "glfw": [
39 39
], ],
"gtk": [
39
],
"windows": [ "windows": [
222 222
] ]
...@@ -2116,6 +2465,9 @@ ...@@ -2116,6 +2465,9 @@
"glfw": [ "glfw": [
"GRAVE_ACCENT" "GRAVE_ACCENT"
], ],
"gtk": [
"quoteleft"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -2135,6 +2487,9 @@ ...@@ -2135,6 +2487,9 @@
"glfw": [ "glfw": [
96 96
], ],
"gtk": [
96
],
"windows": null "windows": null
} }
}, },
...@@ -2149,6 +2504,9 @@ ...@@ -2149,6 +2504,9 @@
"glfw": [ "glfw": [
"COMMA" "COMMA"
], ],
"gtk": [
"comma"
],
"windows": [ "windows": [
"OEM_COMMA" "OEM_COMMA"
] ]
...@@ -2170,6 +2528,9 @@ ...@@ -2170,6 +2528,9 @@
"glfw": [ "glfw": [
44 44
], ],
"gtk": [
44
],
"windows": [ "windows": [
188 188
] ]
...@@ -2186,6 +2547,9 @@ ...@@ -2186,6 +2547,9 @@
"glfw": [ "glfw": [
"PERIOD" "PERIOD"
], ],
"gtk": [
"period"
],
"windows": [ "windows": [
"OEM_PERIOD" "OEM_PERIOD"
] ]
...@@ -2207,6 +2571,9 @@ ...@@ -2207,6 +2571,9 @@
"glfw": [ "glfw": [
46 46
], ],
"gtk": [
46
],
"windows": [ "windows": [
190 190
] ]
...@@ -2223,6 +2590,9 @@ ...@@ -2223,6 +2590,9 @@
"glfw": [ "glfw": [
"SLASH" "SLASH"
], ],
"gtk": [
"slash"
],
"windows": [ "windows": [
"OEM_2" "OEM_2"
] ]
...@@ -2244,6 +2614,9 @@ ...@@ -2244,6 +2614,9 @@
"glfw": [ "glfw": [
47 47
], ],
"gtk": [
47
],
"windows": [ "windows": [
191 191
] ]
...@@ -2260,6 +2633,9 @@ ...@@ -2260,6 +2633,9 @@
"glfw": [ "glfw": [
"CAPS_LOCK" "CAPS_LOCK"
], ],
"gtk": [
"Caps_Lock"
],
"windows": [ "windows": [
"CAPITAL" "CAPITAL"
] ]
...@@ -2281,6 +2657,9 @@ ...@@ -2281,6 +2657,9 @@
"glfw": [ "glfw": [
280 280
], ],
"gtk": [
65509
],
"windows": [ "windows": [
20 20
] ]
...@@ -2297,6 +2676,10 @@ ...@@ -2297,6 +2676,10 @@
"glfw": [ "glfw": [
"F1" "F1"
], ],
"gtk": [
"F1",
"KP_F1"
],
"windows": [ "windows": [
"F1" "F1"
] ]
...@@ -2318,6 +2701,10 @@ ...@@ -2318,6 +2701,10 @@
"glfw": [ "glfw": [
290 290
], ],
"gtk": [
65470,
65425
],
"windows": [ "windows": [
112 112
] ]
...@@ -2334,6 +2721,10 @@ ...@@ -2334,6 +2721,10 @@
"glfw": [ "glfw": [
"F2" "F2"
], ],
"gtk": [
"F2",
"KP_F2"
],
"windows": [ "windows": [
"F2" "F2"
] ]
...@@ -2355,6 +2746,10 @@ ...@@ -2355,6 +2746,10 @@
"glfw": [ "glfw": [
291 291
], ],
"gtk": [
65471,
65426
],
"windows": [ "windows": [
113 113
] ]
...@@ -2371,6 +2766,10 @@ ...@@ -2371,6 +2766,10 @@
"glfw": [ "glfw": [
"F3" "F3"
], ],
"gtk": [
"F3",
"KP_F3"
],
"windows": [ "windows": [
"F3" "F3"
] ]
...@@ -2392,6 +2791,10 @@ ...@@ -2392,6 +2791,10 @@
"glfw": [ "glfw": [
292 292
], ],
"gtk": [
65472,
65427
],
"windows": [ "windows": [
114 114
] ]
...@@ -2408,6 +2811,10 @@ ...@@ -2408,6 +2811,10 @@
"glfw": [ "glfw": [
"F4" "F4"
], ],
"gtk": [
"F4",
"KP_F4"
],
"windows": [ "windows": [
"F4" "F4"
] ]
...@@ -2429,6 +2836,10 @@ ...@@ -2429,6 +2836,10 @@
"glfw": [ "glfw": [
293 293
], ],
"gtk": [
65473,
65428
],
"windows": [ "windows": [
115 115
] ]
...@@ -2445,6 +2856,9 @@ ...@@ -2445,6 +2856,9 @@
"glfw": [ "glfw": [
"F5" "F5"
], ],
"gtk": [
"F5"
],
"windows": [ "windows": [
"F5" "F5"
] ]
...@@ -2466,6 +2880,9 @@ ...@@ -2466,6 +2880,9 @@
"glfw": [ "glfw": [
294 294
], ],
"gtk": [
65474
],
"windows": [ "windows": [
116 116
] ]
...@@ -2482,6 +2899,9 @@ ...@@ -2482,6 +2899,9 @@
"glfw": [ "glfw": [
"F6" "F6"
], ],
"gtk": [
"F6"
],
"windows": [ "windows": [
"F6" "F6"
] ]
...@@ -2503,6 +2923,9 @@ ...@@ -2503,6 +2923,9 @@
"glfw": [ "glfw": [
295 295
], ],
"gtk": [
65475
],
"windows": [ "windows": [
117 117
] ]
...@@ -2519,6 +2942,9 @@ ...@@ -2519,6 +2942,9 @@
"glfw": [ "glfw": [
"F7" "F7"
], ],
"gtk": [
"F7"
],
"windows": [ "windows": [
"F7" "F7"
] ]
...@@ -2540,6 +2966,9 @@ ...@@ -2540,6 +2966,9 @@
"glfw": [ "glfw": [
296 296
], ],
"gtk": [
65476
],
"windows": [ "windows": [
118 118
] ]
...@@ -2556,6 +2985,9 @@ ...@@ -2556,6 +2985,9 @@
"glfw": [ "glfw": [
"F8" "F8"
], ],
"gtk": [
"F8"
],
"windows": [ "windows": [
"F8" "F8"
] ]
...@@ -2577,6 +3009,9 @@ ...@@ -2577,6 +3009,9 @@
"glfw": [ "glfw": [
297 297
], ],
"gtk": [
65477
],
"windows": [ "windows": [
119 119
] ]
...@@ -2593,6 +3028,9 @@ ...@@ -2593,6 +3028,9 @@
"glfw": [ "glfw": [
"F9" "F9"
], ],
"gtk": [
"F9"
],
"windows": [ "windows": [
"F9" "F9"
] ]
...@@ -2614,6 +3052,9 @@ ...@@ -2614,6 +3052,9 @@
"glfw": [ "glfw": [
298 298
], ],
"gtk": [
65478
],
"windows": [ "windows": [
120 120
] ]
...@@ -2630,6 +3071,9 @@ ...@@ -2630,6 +3071,9 @@
"glfw": [ "glfw": [
"F10" "F10"
], ],
"gtk": [
"F10"
],
"windows": [ "windows": [
"F10" "F10"
] ]
...@@ -2651,6 +3095,9 @@ ...@@ -2651,6 +3095,9 @@
"glfw": [ "glfw": [
299 299
], ],
"gtk": [
65479
],
"windows": [ "windows": [
121 121
] ]
...@@ -2667,6 +3114,9 @@ ...@@ -2667,6 +3114,9 @@
"glfw": [ "glfw": [
"F11" "F11"
], ],
"gtk": [
"F11"
],
"windows": [ "windows": [
"F11" "F11"
] ]
...@@ -2688,6 +3138,9 @@ ...@@ -2688,6 +3138,9 @@
"glfw": [ "glfw": [
300 300
], ],
"gtk": [
65480
],
"windows": [ "windows": [
122 122
] ]
...@@ -2704,6 +3157,9 @@ ...@@ -2704,6 +3157,9 @@
"glfw": [ "glfw": [
"F12" "F12"
], ],
"gtk": [
"F12"
],
"windows": [ "windows": [
"F12" "F12"
] ]
...@@ -2725,6 +3181,9 @@ ...@@ -2725,6 +3181,9 @@
"glfw": [ "glfw": [
301 301
], ],
"gtk": [
65481
],
"windows": [ "windows": [
123 123
] ]
...@@ -2741,6 +3200,9 @@ ...@@ -2741,6 +3200,9 @@
"glfw": [ "glfw": [
"PRINT_SCREEN" "PRINT_SCREEN"
], ],
"gtk": [
"3270_PrintScreen"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -2760,6 +3222,9 @@ ...@@ -2760,6 +3222,9 @@
"glfw": [ "glfw": [
283 283
], ],
"gtk": [
64797
],
"windows": null "windows": null
} }
}, },
...@@ -2772,6 +3237,9 @@ ...@@ -2772,6 +3237,9 @@
"english": "Scroll Lock", "english": "Scroll Lock",
"chromium": "scrollLock", "chromium": "scrollLock",
"glfw": null, "glfw": null,
"gtk": [
"Scroll_Lock"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -2789,6 +3257,9 @@ ...@@ -2789,6 +3257,9 @@
116 116
], ],
"glfw": null, "glfw": null,
"gtk": [
65300
],
"windows": null "windows": null
} }
}, },
...@@ -2803,6 +3274,9 @@ ...@@ -2803,6 +3274,9 @@
"glfw": [ "glfw": [
"PAUSE" "PAUSE"
], ],
"gtk": [
"Pause"
],
"windows": [ "windows": [
"PAUSE" "PAUSE"
] ]
...@@ -2825,6 +3299,9 @@ ...@@ -2825,6 +3299,9 @@
"glfw": [ "glfw": [
284 284
], ],
"gtk": [
65299
],
"windows": [ "windows": [
19 19
] ]
...@@ -2841,6 +3318,10 @@ ...@@ -2841,6 +3318,10 @@
"glfw": [ "glfw": [
"INSERT" "INSERT"
], ],
"gtk": [
"Insert",
"KP_Insert"
],
"windows": [ "windows": [
"INSERT" "INSERT"
] ]
...@@ -2862,6 +3343,10 @@ ...@@ -2862,6 +3343,10 @@
"glfw": [ "glfw": [
260 260
], ],
"gtk": [
65379,
65438
],
"windows": [ "windows": [
45 45
] ]
...@@ -2878,6 +3363,10 @@ ...@@ -2878,6 +3363,10 @@
"glfw": [ "glfw": [
"HOME" "HOME"
], ],
"gtk": [
"Home",
"KP_Home"
],
"windows": [ "windows": [
"HOME" "HOME"
] ]
...@@ -2899,6 +3388,10 @@ ...@@ -2899,6 +3388,10 @@
"glfw": [ "glfw": [
268 268
], ],
"gtk": [
65360,
65429
],
"windows": [ "windows": [
36 36
] ]
...@@ -2915,6 +3408,10 @@ ...@@ -2915,6 +3408,10 @@
"glfw": [ "glfw": [
"PAGE_UP" "PAGE_UP"
], ],
"gtk": [
"Page_Up",
"KP_Page_Up"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -2935,6 +3432,10 @@ ...@@ -2935,6 +3432,10 @@
"glfw": [ "glfw": [
266 266
], ],
"gtk": [
65365,
65434
],
"windows": null "windows": null
} }
}, },
...@@ -2949,6 +3450,10 @@ ...@@ -2949,6 +3450,10 @@
"glfw": [ "glfw": [
"DELETE" "DELETE"
], ],
"gtk": [
"Delete",
"KP_Delete"
],
"windows": [ "windows": [
"DELETE" "DELETE"
] ]
...@@ -2970,6 +3475,10 @@ ...@@ -2970,6 +3475,10 @@
"glfw": [ "glfw": [
261 261
], ],
"gtk": [
65535,
65439
],
"windows": [ "windows": [
46 46
] ]
...@@ -2986,6 +3495,10 @@ ...@@ -2986,6 +3495,10 @@
"glfw": [ "glfw": [
"END" "END"
], ],
"gtk": [
"End",
"KP_End"
],
"windows": [ "windows": [
"END" "END"
] ]
...@@ -3007,6 +3520,10 @@ ...@@ -3007,6 +3520,10 @@
"glfw": [ "glfw": [
269 269
], ],
"gtk": [
65367,
65436
],
"windows": [ "windows": [
35 35
] ]
...@@ -3023,6 +3540,10 @@ ...@@ -3023,6 +3540,10 @@
"glfw": [ "glfw": [
"PAGE_DOWN" "PAGE_DOWN"
], ],
"gtk": [
"Page_Down",
"KP_Page_Down"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -3043,6 +3564,10 @@ ...@@ -3043,6 +3564,10 @@
"glfw": [ "glfw": [
267 267
], ],
"gtk": [
65366,
65435
],
"windows": null "windows": null
} }
}, },
...@@ -3057,6 +3582,10 @@ ...@@ -3057,6 +3582,10 @@
"glfw": [ "glfw": [
"RIGHT" "RIGHT"
], ],
"gtk": [
"Right",
"KP_Right"
],
"windows": [ "windows": [
"RIGHT" "RIGHT"
] ]
...@@ -3078,6 +3607,10 @@ ...@@ -3078,6 +3607,10 @@
"glfw": [ "glfw": [
262 262
], ],
"gtk": [
65363,
65432
],
"windows": [ "windows": [
39 39
] ]
...@@ -3094,6 +3627,10 @@ ...@@ -3094,6 +3627,10 @@
"glfw": [ "glfw": [
"LEFT" "LEFT"
], ],
"gtk": [
"Left",
"KP_Left"
],
"windows": [ "windows": [
"LEFT" "LEFT"
] ]
...@@ -3115,6 +3652,10 @@ ...@@ -3115,6 +3652,10 @@
"glfw": [ "glfw": [
263 263
], ],
"gtk": [
65361,
65430
],
"windows": [ "windows": [
37 37
] ]
...@@ -3131,6 +3672,10 @@ ...@@ -3131,6 +3672,10 @@
"glfw": [ "glfw": [
"DOWN" "DOWN"
], ],
"gtk": [
"Down",
"KP_Down"
],
"windows": [ "windows": [
"DOWN" "DOWN"
] ]
...@@ -3152,6 +3697,10 @@ ...@@ -3152,6 +3697,10 @@
"glfw": [ "glfw": [
264 264
], ],
"gtk": [
65364,
65433
],
"windows": [ "windows": [
40 40
] ]
...@@ -3168,6 +3717,10 @@ ...@@ -3168,6 +3717,10 @@
"glfw": [ "glfw": [
"UP" "UP"
], ],
"gtk": [
"Up",
"KP_Up"
],
"windows": [ "windows": [
"UP" "UP"
] ]
...@@ -3189,6 +3742,10 @@ ...@@ -3189,6 +3742,10 @@
"glfw": [ "glfw": [
265 265
], ],
"gtk": [
65362,
65431
],
"windows": [ "windows": [
38 38
] ]
...@@ -3205,6 +3762,9 @@ ...@@ -3205,6 +3762,9 @@
"glfw": [ "glfw": [
"NUM_LOCK" "NUM_LOCK"
], ],
"gtk": [
"Num_Lock"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -3224,6 +3784,9 @@ ...@@ -3224,6 +3784,9 @@
"glfw": [ "glfw": [
282 282
], ],
"gtk": [
65407
],
"windows": null "windows": null
} }
}, },
...@@ -3238,6 +3801,9 @@ ...@@ -3238,6 +3801,9 @@
"glfw": [ "glfw": [
"KP_DIVIDE" "KP_DIVIDE"
], ],
"gtk": [
"KP_Divide"
],
"windows": [ "windows": [
"DIVIDE" "DIVIDE"
] ]
...@@ -3259,6 +3825,9 @@ ...@@ -3259,6 +3825,9 @@
"glfw": [ "glfw": [
331 331
], ],
"gtk": [
65455
],
"windows": [ "windows": [
111 111
] ]
...@@ -3275,6 +3844,9 @@ ...@@ -3275,6 +3844,9 @@
"glfw": [ "glfw": [
"KP_MULTIPLY" "KP_MULTIPLY"
], ],
"gtk": [
"KP_Multiply"
],
"windows": [ "windows": [
"MULTIPLY" "MULTIPLY"
] ]
...@@ -3296,6 +3868,9 @@ ...@@ -3296,6 +3868,9 @@
"glfw": [ "glfw": [
332 332
], ],
"gtk": [
65450
],
"windows": [ "windows": [
106 106
] ]
...@@ -3312,6 +3887,9 @@ ...@@ -3312,6 +3887,9 @@
"glfw": [ "glfw": [
"NUMPAD_SUBTRACT" "NUMPAD_SUBTRACT"
], ],
"gtk": [
"KP_Subtract"
],
"windows": [ "windows": [
"SUBTRACT" "SUBTRACT"
] ]
...@@ -3331,6 +3909,9 @@ ...@@ -3331,6 +3909,9 @@
156 156
], ],
"glfw": null, "glfw": null,
"gtk": [
65453
],
"windows": [ "windows": [
109 109
] ]
...@@ -3347,6 +3928,9 @@ ...@@ -3347,6 +3928,9 @@
"glfw": [ "glfw": [
"KP_ADD" "KP_ADD"
], ],
"gtk": [
"KP_Add"
],
"windows": [ "windows": [
"ADD" "ADD"
] ]
...@@ -3368,6 +3952,9 @@ ...@@ -3368,6 +3952,9 @@
"glfw": [ "glfw": [
334 334
], ],
"gtk": [
65451
],
"windows": [ "windows": [
107 107
] ]
...@@ -3384,6 +3971,9 @@ ...@@ -3384,6 +3971,9 @@
"glfw": [ "glfw": [
"KP_ENTER" "KP_ENTER"
], ],
"gtk": [
"KP_Enter"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -3403,6 +3993,9 @@ ...@@ -3403,6 +3993,9 @@
"glfw": [ "glfw": [
335 335
], ],
"gtk": [
65421
],
"windows": null "windows": null
} }
}, },
...@@ -3417,6 +4010,9 @@ ...@@ -3417,6 +4010,9 @@
"glfw": [ "glfw": [
"KP_1" "KP_1"
], ],
"gtk": [
"KP_1"
],
"windows": [ "windows": [
"NUMPAD1" "NUMPAD1"
] ]
...@@ -3438,6 +4034,9 @@ ...@@ -3438,6 +4034,9 @@
"glfw": [ "glfw": [
321 321
], ],
"gtk": [
65457
],
"windows": [ "windows": [
97 97
] ]
...@@ -3454,6 +4053,9 @@ ...@@ -3454,6 +4053,9 @@
"glfw": [ "glfw": [
"KP_2" "KP_2"
], ],
"gtk": [
"KP_2"
],
"windows": [ "windows": [
"NUMPAD2" "NUMPAD2"
] ]
...@@ -3475,6 +4077,9 @@ ...@@ -3475,6 +4077,9 @@
"glfw": [ "glfw": [
322 322
], ],
"gtk": [
65458
],
"windows": [ "windows": [
98 98
] ]
...@@ -3491,6 +4096,9 @@ ...@@ -3491,6 +4096,9 @@
"glfw": [ "glfw": [
"KP_3" "KP_3"
], ],
"gtk": [
"KP_3"
],
"windows": [ "windows": [
"NUMPAD3" "NUMPAD3"
] ]
...@@ -3512,6 +4120,9 @@ ...@@ -3512,6 +4120,9 @@
"glfw": [ "glfw": [
323 323
], ],
"gtk": [
65459
],
"windows": [ "windows": [
99 99
] ]
...@@ -3528,6 +4139,9 @@ ...@@ -3528,6 +4139,9 @@
"glfw": [ "glfw": [
"KP_4" "KP_4"
], ],
"gtk": [
"KP_4"
],
"windows": [ "windows": [
"NUMPAD4" "NUMPAD4"
] ]
...@@ -3549,6 +4163,9 @@ ...@@ -3549,6 +4163,9 @@
"glfw": [ "glfw": [
324 324
], ],
"gtk": [
65460
],
"windows": [ "windows": [
100 100
] ]
...@@ -3565,6 +4182,9 @@ ...@@ -3565,6 +4182,9 @@
"glfw": [ "glfw": [
"KP_5" "KP_5"
], ],
"gtk": [
"KP_5"
],
"windows": [ "windows": [
"NUMPAD5" "NUMPAD5"
] ]
...@@ -3586,6 +4206,9 @@ ...@@ -3586,6 +4206,9 @@
"glfw": [ "glfw": [
325 325
], ],
"gtk": [
65461
],
"windows": [ "windows": [
101 101
] ]
...@@ -3602,6 +4225,9 @@ ...@@ -3602,6 +4225,9 @@
"glfw": [ "glfw": [
"KP_6" "KP_6"
], ],
"gtk": [
"KP_6"
],
"windows": [ "windows": [
"NUMPAD6" "NUMPAD6"
] ]
...@@ -3623,6 +4249,9 @@ ...@@ -3623,6 +4249,9 @@
"glfw": [ "glfw": [
326 326
], ],
"gtk": [
65462
],
"windows": [ "windows": [
102 102
] ]
...@@ -3639,6 +4268,9 @@ ...@@ -3639,6 +4268,9 @@
"glfw": [ "glfw": [
"KP_7" "KP_7"
], ],
"gtk": [
"KP_7"
],
"windows": [ "windows": [
"NUMPAD7" "NUMPAD7"
] ]
...@@ -3660,6 +4292,9 @@ ...@@ -3660,6 +4292,9 @@
"glfw": [ "glfw": [
327 327
], ],
"gtk": [
65463
],
"windows": [ "windows": [
103 103
] ]
...@@ -3676,6 +4311,9 @@ ...@@ -3676,6 +4311,9 @@
"glfw": [ "glfw": [
"KP_8" "KP_8"
], ],
"gtk": [
"KP_8"
],
"windows": [ "windows": [
"NUMPAD8" "NUMPAD8"
] ]
...@@ -3697,6 +4335,9 @@ ...@@ -3697,6 +4335,9 @@
"glfw": [ "glfw": [
328 328
], ],
"gtk": [
65464
],
"windows": [ "windows": [
104 104
] ]
...@@ -3713,6 +4354,9 @@ ...@@ -3713,6 +4354,9 @@
"glfw": [ "glfw": [
"KP_9" "KP_9"
], ],
"gtk": [
"KP_9"
],
"windows": [ "windows": [
"NUMPAD9" "NUMPAD9"
] ]
...@@ -3734,6 +4378,9 @@ ...@@ -3734,6 +4378,9 @@
"glfw": [ "glfw": [
329 329
], ],
"gtk": [
65465
],
"windows": [ "windows": [
105 105
] ]
...@@ -3750,6 +4397,9 @@ ...@@ -3750,6 +4397,9 @@
"glfw": [ "glfw": [
"KP_0" "KP_0"
], ],
"gtk": [
"KP_0"
],
"windows": [ "windows": [
"NUMPAD0" "NUMPAD0"
] ]
...@@ -3771,6 +4421,9 @@ ...@@ -3771,6 +4421,9 @@
"glfw": [ "glfw": [
320 320
], ],
"gtk": [
65456
],
"windows": [ "windows": [
96 96
] ]
...@@ -3787,6 +4440,9 @@ ...@@ -3787,6 +4440,9 @@
"glfw": [ "glfw": [
"KP_DECIMAL" "KP_DECIMAL"
], ],
"gtk": [
"KP_Decimal"
],
"windows": [ "windows": [
"DECIMAL" "DECIMAL"
] ]
...@@ -3808,6 +4464,9 @@ ...@@ -3808,6 +4464,9 @@
"glfw": [ "glfw": [
330 330
], ],
"gtk": [
65454
],
"windows": [ "windows": [
110 110
] ]
...@@ -3820,6 +4479,7 @@ ...@@ -3820,6 +4479,7 @@
"english": "Intl Backslash", "english": "Intl Backslash",
"chromium": "intlBackslash", "chromium": "intlBackslash",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -3833,6 +4493,7 @@ ...@@ -3833,6 +4493,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -3847,6 +4508,9 @@ ...@@ -3847,6 +4508,9 @@
"glfw": [ "glfw": [
"MENU" "MENU"
], ],
"gtk": [
"Menu"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -3867,6 +4531,9 @@ ...@@ -3867,6 +4531,9 @@
"glfw": [ "glfw": [
348 348
], ],
"gtk": [
65383
],
"windows": null "windows": null
} }
}, },
...@@ -3879,6 +4546,9 @@ ...@@ -3879,6 +4546,9 @@
"english": "Power", "english": "Power",
"chromium": "power", "chromium": "power",
"glfw": null, "glfw": null,
"gtk": [
"PowerOff"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -3897,6 +4567,9 @@ ...@@ -3897,6 +4567,9 @@
26 26
], ],
"glfw": null, "glfw": null,
"gtk": [
269025066
],
"windows": null "windows": null
} }
}, },
...@@ -3911,6 +4584,9 @@ ...@@ -3911,6 +4584,9 @@
"glfw": [ "glfw": [
"KP_EQUAL" "KP_EQUAL"
], ],
"gtk": [
"KP_Equal"
],
"windows": [ "windows": [
"OEM_NEC_EQUAL" "OEM_NEC_EQUAL"
] ]
...@@ -3932,6 +4608,9 @@ ...@@ -3932,6 +4608,9 @@
"glfw": [ "glfw": [
336 336
], ],
"gtk": [
65469
],
"windows": [ "windows": [
146 146
] ]
...@@ -3948,6 +4627,9 @@ ...@@ -3948,6 +4627,9 @@
"glfw": [ "glfw": [
"F13" "F13"
], ],
"gtk": [
"F13"
],
"windows": [ "windows": [
"F13" "F13"
] ]
...@@ -3967,6 +4649,9 @@ ...@@ -3967,6 +4649,9 @@
"glfw": [ "glfw": [
302 302
], ],
"gtk": [
65482
],
"windows": [ "windows": [
124 124
] ]
...@@ -3983,6 +4668,9 @@ ...@@ -3983,6 +4668,9 @@
"glfw": [ "glfw": [
"F14" "F14"
], ],
"gtk": [
"F14"
],
"windows": [ "windows": [
"F14" "F14"
] ]
...@@ -4002,6 +4690,9 @@ ...@@ -4002,6 +4690,9 @@
"glfw": [ "glfw": [
303 303
], ],
"gtk": [
65483
],
"windows": [ "windows": [
125 125
] ]
...@@ -4018,6 +4709,9 @@ ...@@ -4018,6 +4709,9 @@
"glfw": [ "glfw": [
"F15" "F15"
], ],
"gtk": [
"F15"
],
"windows": [ "windows": [
"F15" "F15"
] ]
...@@ -4037,6 +4731,9 @@ ...@@ -4037,6 +4731,9 @@
"glfw": [ "glfw": [
304 304
], ],
"gtk": [
65484
],
"windows": [ "windows": [
126 126
] ]
...@@ -4053,6 +4750,9 @@ ...@@ -4053,6 +4750,9 @@
"glfw": [ "glfw": [
"F16" "F16"
], ],
"gtk": [
"F16"
],
"windows": [ "windows": [
"F16" "F16"
] ]
...@@ -4072,6 +4772,9 @@ ...@@ -4072,6 +4772,9 @@
"glfw": [ "glfw": [
305 305
], ],
"gtk": [
65485
],
"windows": [ "windows": [
127 127
] ]
...@@ -4088,6 +4791,9 @@ ...@@ -4088,6 +4791,9 @@
"glfw": [ "glfw": [
"F17" "F17"
], ],
"gtk": [
"F17"
],
"windows": [ "windows": [
"F17" "F17"
] ]
...@@ -4107,6 +4813,9 @@ ...@@ -4107,6 +4813,9 @@
"glfw": [ "glfw": [
306 306
], ],
"gtk": [
65486
],
"windows": [ "windows": [
128 128
] ]
...@@ -4123,6 +4832,9 @@ ...@@ -4123,6 +4832,9 @@
"glfw": [ "glfw": [
"F18" "F18"
], ],
"gtk": [
"F18"
],
"windows": [ "windows": [
"F18" "F18"
] ]
...@@ -4142,6 +4854,9 @@ ...@@ -4142,6 +4854,9 @@
"glfw": [ "glfw": [
307 307
], ],
"gtk": [
65487
],
"windows": [ "windows": [
129 129
] ]
...@@ -4158,6 +4873,9 @@ ...@@ -4158,6 +4873,9 @@
"glfw": [ "glfw": [
"F19" "F19"
], ],
"gtk": [
"F19"
],
"windows": [ "windows": [
"F19" "F19"
] ]
...@@ -4177,6 +4895,9 @@ ...@@ -4177,6 +4895,9 @@
"glfw": [ "glfw": [
308 308
], ],
"gtk": [
65488
],
"windows": [ "windows": [
130 130
] ]
...@@ -4193,6 +4914,9 @@ ...@@ -4193,6 +4914,9 @@
"glfw": [ "glfw": [
"F20" "F20"
], ],
"gtk": [
"F20"
],
"windows": [ "windows": [
"F20" "F20"
] ]
...@@ -4212,6 +4936,9 @@ ...@@ -4212,6 +4936,9 @@
"glfw": [ "glfw": [
309 309
], ],
"gtk": [
65489
],
"windows": [ "windows": [
131 131
] ]
...@@ -4228,6 +4955,9 @@ ...@@ -4228,6 +4955,9 @@
"glfw": [ "glfw": [
"F21" "F21"
], ],
"gtk": [
"F21"
],
"windows": [ "windows": [
"F21" "F21"
] ]
...@@ -4247,6 +4977,9 @@ ...@@ -4247,6 +4977,9 @@
"glfw": [ "glfw": [
310 310
], ],
"gtk": [
65490
],
"windows": [ "windows": [
132 132
] ]
...@@ -4263,6 +4996,9 @@ ...@@ -4263,6 +4996,9 @@
"glfw": [ "glfw": [
"F22" "F22"
], ],
"gtk": [
"F22"
],
"windows": [ "windows": [
"F22" "F22"
] ]
...@@ -4282,6 +5018,9 @@ ...@@ -4282,6 +5018,9 @@
"glfw": [ "glfw": [
311 311
], ],
"gtk": [
65491
],
"windows": [ "windows": [
133 133
] ]
...@@ -4298,6 +5037,9 @@ ...@@ -4298,6 +5037,9 @@
"glfw": [ "glfw": [
"F23" "F23"
], ],
"gtk": [
"F23"
],
"windows": [ "windows": [
"F23" "F23"
] ]
...@@ -4317,6 +5059,9 @@ ...@@ -4317,6 +5059,9 @@
"glfw": [ "glfw": [
312 312
], ],
"gtk": [
65492
],
"windows": [ "windows": [
134 134
] ]
...@@ -4331,6 +5076,9 @@ ...@@ -4331,6 +5076,9 @@
"english": "F24", "english": "F24",
"chromium": "f24", "chromium": "f24",
"glfw": null, "glfw": null,
"gtk": [
"F24"
],
"windows": [ "windows": [
"F24" "F24"
] ]
...@@ -4348,6 +5096,9 @@ ...@@ -4348,6 +5096,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
65493
],
"windows": [ "windows": [
135 135
] ]
...@@ -4362,6 +5113,9 @@ ...@@ -4362,6 +5113,9 @@
"english": "Open", "english": "Open",
"chromium": "open", "chromium": "open",
"glfw": null, "glfw": null,
"gtk": [
"Open"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -4377,6 +5131,9 @@ ...@@ -4377,6 +5131,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
269025131
],
"windows": null "windows": null
} }
}, },
...@@ -4389,6 +5146,9 @@ ...@@ -4389,6 +5146,9 @@
"english": "Help", "english": "Help",
"chromium": "help", "chromium": "help",
"glfw": null, "glfw": null,
"gtk": [
"Help"
],
"windows": [ "windows": [
"HELP" "HELP"
] ]
...@@ -4408,6 +5168,9 @@ ...@@ -4408,6 +5168,9 @@
259 259
], ],
"glfw": null, "glfw": null,
"gtk": [
65386
],
"windows": [ "windows": [
47 47
] ]
...@@ -4422,6 +5185,9 @@ ...@@ -4422,6 +5185,9 @@
"english": "Select", "english": "Select",
"chromium": "select", "chromium": "select",
"glfw": null, "glfw": null,
"gtk": [
"Select"
],
"windows": [ "windows": [
"SELECT" "SELECT"
] ]
...@@ -4441,6 +5207,9 @@ ...@@ -4441,6 +5207,9 @@
23 23
], ],
"glfw": null, "glfw": null,
"gtk": [
65376
],
"windows": [ "windows": [
41 41
] ]
...@@ -4455,6 +5224,7 @@ ...@@ -4455,6 +5224,7 @@
"english": "Again", "english": "Again",
"chromium": "again", "chromium": "again",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -4470,6 +5240,7 @@ ...@@ -4470,6 +5240,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -4482,6 +5253,9 @@ ...@@ -4482,6 +5253,9 @@
"english": "Undo", "english": "Undo",
"chromium": "undo", "chromium": "undo",
"glfw": null, "glfw": null,
"gtk": [
"Undo"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -4497,6 +5271,9 @@ ...@@ -4497,6 +5271,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
65381
],
"windows": null "windows": null
} }
}, },
...@@ -4509,6 +5286,7 @@ ...@@ -4509,6 +5286,7 @@
"english": "Cut", "english": "Cut",
"chromium": "cut", "chromium": "cut",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -4526,6 +5304,7 @@ ...@@ -4526,6 +5304,7 @@
277 277
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -4538,6 +5317,10 @@ ...@@ -4538,6 +5317,10 @@
"english": "Copy", "english": "Copy",
"chromium": "copy", "chromium": "copy",
"glfw": null, "glfw": null,
"gtk": [
"Copy",
"3270_Copy"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -4555,6 +5338,10 @@ ...@@ -4555,6 +5338,10 @@
278 278
], ],
"glfw": null, "glfw": null,
"gtk": [
269025111,
64789
],
"windows": null "windows": null
} }
}, },
...@@ -4567,6 +5354,9 @@ ...@@ -4567,6 +5354,9 @@
"english": "Paste", "english": "Paste",
"chromium": "paste", "chromium": "paste",
"glfw": null, "glfw": null,
"gtk": [
"Paste"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -4584,6 +5374,9 @@ ...@@ -4584,6 +5374,9 @@
279 279
], ],
"glfw": null, "glfw": null,
"gtk": [
269025133
],
"windows": null "windows": null
} }
}, },
...@@ -4596,6 +5389,9 @@ ...@@ -4596,6 +5389,9 @@
"english": "Find", "english": "Find",
"chromium": "find", "chromium": "find",
"glfw": null, "glfw": null,
"gtk": [
"Find"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -4611,6 +5407,9 @@ ...@@ -4611,6 +5407,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
65384
],
"windows": null "windows": null
} }
}, },
...@@ -4623,6 +5422,9 @@ ...@@ -4623,6 +5422,9 @@
"english": "Audio Volume Mute", "english": "Audio Volume Mute",
"chromium": "volumeMute", "chromium": "volumeMute",
"glfw": null, "glfw": null,
"gtk": [
"AudioMute"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -4640,6 +5442,9 @@ ...@@ -4640,6 +5442,9 @@
164 164
], ],
"glfw": null, "glfw": null,
"gtk": [
269025042
],
"windows": null "windows": null
} }
}, },
...@@ -4652,6 +5457,9 @@ ...@@ -4652,6 +5457,9 @@
"english": "Audio Volume Up", "english": "Audio Volume Up",
"chromium": "volumeUp", "chromium": "volumeUp",
"glfw": null, "glfw": null,
"gtk": [
"AudioRaiseVolume"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -4669,6 +5477,9 @@ ...@@ -4669,6 +5477,9 @@
24 24
], ],
"glfw": null, "glfw": null,
"gtk": [
269025043
],
"windows": null "windows": null
} }
}, },
...@@ -4681,6 +5492,9 @@ ...@@ -4681,6 +5492,9 @@
"english": "Audio Volume Down", "english": "Audio Volume Down",
"chromium": "volumeDown", "chromium": "volumeDown",
"glfw": null, "glfw": null,
"gtk": [
"AudioLowerVolume"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -4698,6 +5512,9 @@ ...@@ -4698,6 +5512,9 @@
25 25
], ],
"glfw": null, "glfw": null,
"gtk": [
269025041
],
"windows": null "windows": null
} }
}, },
...@@ -4710,6 +5527,7 @@ ...@@ -4710,6 +5527,7 @@
"english": "Numpad Comma", "english": "Numpad Comma",
"chromium": "numpadComma", "chromium": "numpadComma",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -4728,6 +5546,7 @@ ...@@ -4728,6 +5546,7 @@
159 159
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -4738,6 +5557,7 @@ ...@@ -4738,6 +5557,7 @@
"english": "Intl Ro", "english": "Intl Ro",
"chromium": "intlRo", "chromium": "intlRo",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -4751,6 +5571,7 @@ ...@@ -4751,6 +5571,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -4761,6 +5582,9 @@ ...@@ -4761,6 +5582,9 @@
"english": "Kana Mode", "english": "Kana Mode",
"chromium": "kanaMode", "chromium": "kanaMode",
"glfw": null, "glfw": null,
"gtk": [
"kana_switch"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -4774,6 +5598,9 @@ ...@@ -4774,6 +5598,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
65406
],
"windows": null "windows": null
} }
}, },
...@@ -4784,6 +5611,9 @@ ...@@ -4784,6 +5611,9 @@
"english": "Intl Yen", "english": "Intl Yen",
"chromium": "intlYen", "chromium": "intlYen",
"glfw": null, "glfw": null,
"gtk": [
"yen"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -4797,6 +5627,9 @@ ...@@ -4797,6 +5627,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
165
],
"windows": null "windows": null
} }
}, },
...@@ -4809,6 +5642,7 @@ ...@@ -4809,6 +5642,7 @@
"english": "Convert", "english": "Convert",
"chromium": "convert", "chromium": "convert",
"glfw": null, "glfw": null,
"gtk": null,
"windows": [ "windows": [
"CONVERT" "CONVERT"
] ]
...@@ -4828,6 +5662,7 @@ ...@@ -4828,6 +5662,7 @@
214 214
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": [ "windows": [
28 28
] ]
...@@ -4842,6 +5677,7 @@ ...@@ -4842,6 +5677,7 @@
"english": "Non Convert", "english": "Non Convert",
"chromium": "nonConvert", "chromium": "nonConvert",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -4859,6 +5695,7 @@ ...@@ -4859,6 +5695,7 @@
213 213
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -4869,6 +5706,7 @@ ...@@ -4869,6 +5706,7 @@
"english": "Lang 1", "english": "Lang 1",
"chromium": "lang1", "chromium": "lang1",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -4882,6 +5720,7 @@ ...@@ -4882,6 +5720,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -4892,6 +5731,7 @@ ...@@ -4892,6 +5731,7 @@
"english": "Lang 2", "english": "Lang 2",
"chromium": "lang2", "chromium": "lang2",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -4905,6 +5745,7 @@ ...@@ -4905,6 +5745,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -4917,6 +5758,7 @@ ...@@ -4917,6 +5758,7 @@
"english": "Lang 3", "english": "Lang 3",
"chromium": "lang3", "chromium": "lang3",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -4932,6 +5774,7 @@ ...@@ -4932,6 +5774,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -4944,6 +5787,7 @@ ...@@ -4944,6 +5787,7 @@
"english": "Lang 4", "english": "Lang 4",
"chromium": "lang4", "chromium": "lang4",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -4959,6 +5803,7 @@ ...@@ -4959,6 +5803,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -4969,6 +5814,7 @@ ...@@ -4969,6 +5814,7 @@
"english": "Lang 5", "english": "Lang 5",
"chromium": "lang5", "chromium": "lang5",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -4982,6 +5828,7 @@ ...@@ -4982,6 +5828,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -4992,6 +5839,7 @@ ...@@ -4992,6 +5839,7 @@
"english": "Abort", "english": "Abort",
"chromium": "abort", "chromium": "abort",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5005,6 +5853,7 @@ ...@@ -5005,6 +5853,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -5017,6 +5866,7 @@ ...@@ -5017,6 +5866,7 @@
"english": "Props", "english": "Props",
"chromium": "props", "chromium": "props",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5032,6 +5882,7 @@ ...@@ -5032,6 +5882,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -5044,6 +5895,7 @@ ...@@ -5044,6 +5895,7 @@
"english": "Numpad Paren Left", "english": "Numpad Paren Left",
"chromium": "numpadParenLeft", "chromium": "numpadParenLeft",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5061,6 +5913,7 @@ ...@@ -5061,6 +5913,7 @@
162 162
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -5073,6 +5926,7 @@ ...@@ -5073,6 +5926,7 @@
"english": "Numpad Paren Right", "english": "Numpad Paren Right",
"chromium": "numpadParenRight", "chromium": "numpadParenRight",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5090,6 +5944,7 @@ ...@@ -5090,6 +5944,7 @@
163 163
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -5100,6 +5955,7 @@ ...@@ -5100,6 +5955,7 @@
"english": "Numpad Backspace", "english": "Numpad Backspace",
"chromium": "numpadBackspace", "chromium": "numpadBackspace",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5113,6 +5969,7 @@ ...@@ -5113,6 +5969,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -5123,6 +5980,7 @@ ...@@ -5123,6 +5980,7 @@
"english": "Numpad Memory Store", "english": "Numpad Memory Store",
"chromium": "numpadMemoryStore", "chromium": "numpadMemoryStore",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5136,6 +5994,7 @@ ...@@ -5136,6 +5994,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -5146,6 +6005,7 @@ ...@@ -5146,6 +6005,7 @@
"english": "Numpad Memory Recall", "english": "Numpad Memory Recall",
"chromium": "numpadMemoryRecall", "chromium": "numpadMemoryRecall",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5159,6 +6019,7 @@ ...@@ -5159,6 +6019,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -5169,6 +6030,7 @@ ...@@ -5169,6 +6030,7 @@
"english": "Numpad Memory Clear", "english": "Numpad Memory Clear",
"chromium": "numpadMemoryClear", "chromium": "numpadMemoryClear",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5182,6 +6044,7 @@ ...@@ -5182,6 +6044,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -5192,6 +6055,7 @@ ...@@ -5192,6 +6055,7 @@
"english": "Numpad Memory Add", "english": "Numpad Memory Add",
"chromium": "numpadMemoryAdd", "chromium": "numpadMemoryAdd",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5205,6 +6069,7 @@ ...@@ -5205,6 +6069,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -5215,6 +6080,7 @@ ...@@ -5215,6 +6080,7 @@
"english": "Numpad Memory Subtract", "english": "Numpad Memory Subtract",
"chromium": "numpadMemorySubtract", "chromium": "numpadMemorySubtract",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5228,6 +6094,7 @@ ...@@ -5228,6 +6094,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -5238,6 +6105,7 @@ ...@@ -5238,6 +6105,7 @@
"english": "Numpad Sign Change", "english": "Numpad Sign Change",
"chromium": "numpadSignChange", "chromium": "numpadSignChange",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5251,6 +6119,7 @@ ...@@ -5251,6 +6119,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -5261,6 +6130,7 @@ ...@@ -5261,6 +6130,7 @@
"english": "Numpad Clear", "english": "Numpad Clear",
"chromium": "numpadClear", "chromium": "numpadClear",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5274,6 +6144,7 @@ ...@@ -5274,6 +6144,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -5284,6 +6155,7 @@ ...@@ -5284,6 +6155,7 @@
"english": "Numpad Clear Entry", "english": "Numpad Clear Entry",
"chromium": "numpadClearEntry", "chromium": "numpadClearEntry",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5297,6 +6169,7 @@ ...@@ -5297,6 +6169,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -5311,6 +6184,9 @@ ...@@ -5311,6 +6184,9 @@
"glfw": [ "glfw": [
"LEFT_CONTROL" "LEFT_CONTROL"
], ],
"gtk": [
"Control_L"
],
"windows": [ "windows": [
"LCONTROL" "LCONTROL"
] ]
...@@ -5332,6 +6208,9 @@ ...@@ -5332,6 +6208,9 @@
"glfw": [ "glfw": [
341 341
], ],
"gtk": [
65507
],
"windows": [ "windows": [
162 162
] ]
...@@ -5348,6 +6227,9 @@ ...@@ -5348,6 +6227,9 @@
"glfw": [ "glfw": [
"LEFT_SHIFT" "LEFT_SHIFT"
], ],
"gtk": [
"Shift_L"
],
"windows": [ "windows": [
"LSHIFT" "LSHIFT"
] ]
...@@ -5369,6 +6251,9 @@ ...@@ -5369,6 +6251,9 @@
"glfw": [ "glfw": [
340 340
], ],
"gtk": [
65505
],
"windows": [ "windows": [
160 160
] ]
...@@ -5385,6 +6270,9 @@ ...@@ -5385,6 +6270,9 @@
"glfw": [ "glfw": [
"LEFT_ALT" "LEFT_ALT"
], ],
"gtk": [
"Alt_L"
],
"windows": [ "windows": [
"LMENU" "LMENU"
] ]
...@@ -5406,6 +6294,9 @@ ...@@ -5406,6 +6294,9 @@
"glfw": [ "glfw": [
342 342
], ],
"gtk": [
65513
],
"windows": [ "windows": [
164 164
] ]
...@@ -5422,6 +6313,9 @@ ...@@ -5422,6 +6313,9 @@
"glfw": [ "glfw": [
"LEFT_SUPER" "LEFT_SUPER"
], ],
"gtk": [
"Meta_L"
],
"windows": [ "windows": [
"LWIN" "LWIN"
] ]
...@@ -5443,6 +6337,9 @@ ...@@ -5443,6 +6337,9 @@
"glfw": [ "glfw": [
343 343
], ],
"gtk": [
65511
],
"windows": [ "windows": [
91 91
] ]
...@@ -5459,6 +6356,9 @@ ...@@ -5459,6 +6356,9 @@
"glfw": [ "glfw": [
"RIGHT_CONTROL" "RIGHT_CONTROL"
], ],
"gtk": [
"Control_R"
],
"windows": [ "windows": [
"RCONTROL" "RCONTROL"
] ]
...@@ -5480,6 +6380,9 @@ ...@@ -5480,6 +6380,9 @@
"glfw": [ "glfw": [
345 345
], ],
"gtk": [
65508
],
"windows": [ "windows": [
163 163
] ]
...@@ -5496,6 +6399,9 @@ ...@@ -5496,6 +6399,9 @@
"glfw": [ "glfw": [
"RIGHT_SHIFT" "RIGHT_SHIFT"
], ],
"gtk": [
"Shift_R"
],
"windows": [ "windows": [
"RSHIFT" "RSHIFT"
] ]
...@@ -5517,6 +6423,9 @@ ...@@ -5517,6 +6423,9 @@
"glfw": [ "glfw": [
344 344
], ],
"gtk": [
65506
],
"windows": [ "windows": [
161 161
] ]
...@@ -5533,6 +6442,9 @@ ...@@ -5533,6 +6442,9 @@
"glfw": [ "glfw": [
"RIGHT_ALT" "RIGHT_ALT"
], ],
"gtk": [
"Alt_R"
],
"windows": [ "windows": [
"RMENU" "RMENU"
] ]
...@@ -5554,6 +6466,9 @@ ...@@ -5554,6 +6466,9 @@
"glfw": [ "glfw": [
346 346
], ],
"gtk": [
65514
],
"windows": [ "windows": [
165 165
] ]
...@@ -5570,6 +6485,9 @@ ...@@ -5570,6 +6485,9 @@
"glfw": [ "glfw": [
"RIGHT_SUPER" "RIGHT_SUPER"
], ],
"gtk": [
"Meta_R"
],
"windows": [ "windows": [
"RWIN" "RWIN"
] ]
...@@ -5591,6 +6509,9 @@ ...@@ -5591,6 +6509,9 @@
"glfw": [ "glfw": [
347 347
], ],
"gtk": [
65512
],
"windows": [ "windows": [
92 92
] ]
...@@ -5605,6 +6526,7 @@ ...@@ -5605,6 +6526,7 @@
"english": "Info", "english": "Info",
"chromium": "info", "chromium": "info",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5622,6 +6544,7 @@ ...@@ -5622,6 +6544,7 @@
165 165
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -5634,6 +6557,7 @@ ...@@ -5634,6 +6557,7 @@
"english": "Closed Caption Toggle", "english": "Closed Caption Toggle",
"chromium": "closedCaptionToggle", "chromium": "closedCaptionToggle",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5649,6 +6573,7 @@ ...@@ -5649,6 +6573,7 @@
175 175
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -5661,6 +6586,9 @@ ...@@ -5661,6 +6586,9 @@
"english": "Brightness Up", "english": "Brightness Up",
"chromium": "brightnessUp", "chromium": "brightnessUp",
"glfw": null, "glfw": null,
"gtk": [
"MonBrightnessUp"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5678,6 +6606,9 @@ ...@@ -5678,6 +6606,9 @@
221 221
], ],
"glfw": null, "glfw": null,
"gtk": [
269025026
],
"windows": null "windows": null
} }
}, },
...@@ -5690,6 +6621,9 @@ ...@@ -5690,6 +6621,9 @@
"english": "Brightness Down", "english": "Brightness Down",
"chromium": "brightnessDown", "chromium": "brightnessDown",
"glfw": null, "glfw": null,
"gtk": [
"MonBrightnessDown"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5707,6 +6641,9 @@ ...@@ -5707,6 +6641,9 @@
220 220
], ],
"glfw": null, "glfw": null,
"gtk": [
269025027
],
"windows": null "windows": null
} }
}, },
...@@ -5717,6 +6654,7 @@ ...@@ -5717,6 +6654,7 @@
"english": "Brightness Toggle", "english": "Brightness Toggle",
"chromium": "brightnessToggle", "chromium": "brightnessToggle",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5730,6 +6668,7 @@ ...@@ -5730,6 +6668,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -5740,6 +6679,7 @@ ...@@ -5740,6 +6679,7 @@
"english": "Brightness Minimum", "english": "Brightness Minimum",
"chromium": "brightnessMinimum", "chromium": "brightnessMinimum",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5753,6 +6693,7 @@ ...@@ -5753,6 +6693,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -5763,6 +6704,7 @@ ...@@ -5763,6 +6704,7 @@
"english": "Brightness Maximum", "english": "Brightness Maximum",
"chromium": "brightnessMaximum", "chromium": "brightnessMaximum",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5776,6 +6718,7 @@ ...@@ -5776,6 +6718,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -5786,6 +6729,7 @@ ...@@ -5786,6 +6729,7 @@
"english": "Brightness Auto", "english": "Brightness Auto",
"chromium": "brightnessAuto", "chromium": "brightnessAuto",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5799,6 +6743,65 @@ ...@@ -5799,6 +6743,65 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null
}
},
"kbdIllumUp": {
"names": {
"domkey": null,
"android": null,
"english": "Kbd Illum Up",
"chromium": "kbdIllumUp",
"glfw": null,
"gtk": [
"KbdBrightnessUp"
],
"windows": null
},
"scanCodes": {
"android": null,
"usb": 786553,
"linux": 230,
"xkb": 238,
"windows": null,
"macos": null
},
"keyCodes": {
"android": null,
"glfw": null,
"gtk": [
269025029
],
"windows": null
}
},
"kbdIllumDown": {
"names": {
"domkey": null,
"android": null,
"english": "Kbd Illum Down",
"chromium": "kbdIllumDown",
"glfw": null,
"gtk": [
"KbdBrightnessDown"
],
"windows": null
},
"scanCodes": {
"android": null,
"usb": 786554,
"linux": 229,
"xkb": 237,
"windows": null,
"macos": null
},
"keyCodes": {
"android": null,
"glfw": null,
"gtk": [
269025030
],
"windows": null "windows": null
} }
}, },
...@@ -5811,6 +6814,7 @@ ...@@ -5811,6 +6814,7 @@
"english": "Media Last", "english": "Media Last",
"chromium": "mediaLast", "chromium": "mediaLast",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5826,6 +6830,7 @@ ...@@ -5826,6 +6830,7 @@
229 229
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -5836,6 +6841,9 @@ ...@@ -5836,6 +6841,9 @@
"english": "Launch Phone", "english": "Launch Phone",
"chromium": "launchPhone", "chromium": "launchPhone",
"glfw": null, "glfw": null,
"gtk": [
"Phone"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5849,6 +6857,9 @@ ...@@ -5849,6 +6857,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
269025134
],
"windows": null "windows": null
} }
}, },
...@@ -5859,6 +6870,7 @@ ...@@ -5859,6 +6870,7 @@
"english": "Program Guide", "english": "Program Guide",
"chromium": "programGuide", "chromium": "programGuide",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5872,6 +6884,7 @@ ...@@ -5872,6 +6884,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -5884,6 +6897,7 @@ ...@@ -5884,6 +6897,7 @@
"english": "Exit", "english": "Exit",
"chromium": "exit", "chromium": "exit",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5899,6 +6913,7 @@ ...@@ -5899,6 +6913,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -5911,6 +6926,7 @@ ...@@ -5911,6 +6926,7 @@
"english": "Channel Up", "english": "Channel Up",
"chromium": "channelUp", "chromium": "channelUp",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5928,6 +6944,7 @@ ...@@ -5928,6 +6944,7 @@
166 166
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -5940,6 +6957,7 @@ ...@@ -5940,6 +6957,7 @@
"english": "Channel Down", "english": "Channel Down",
"chromium": "channelDown", "chromium": "channelDown",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5957,6 +6975,7 @@ ...@@ -5957,6 +6975,7 @@
167 167
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -5969,6 +6988,10 @@ ...@@ -5969,6 +6988,10 @@
"english": "Media Play", "english": "Media Play",
"chromium": "mediaPlay", "chromium": "mediaPlay",
"glfw": null, "glfw": null,
"gtk": [
"AudioPlay",
"3270_Play"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -5987,6 +7010,10 @@ ...@@ -5987,6 +7010,10 @@
126 126
], ],
"glfw": null, "glfw": null,
"gtk": [
269025044,
64790
],
"windows": null "windows": null
} }
}, },
...@@ -5999,6 +7026,9 @@ ...@@ -5999,6 +7026,9 @@
"english": "Media Pause", "english": "Media Pause",
"chromium": "mediaPause", "chromium": "mediaPause",
"glfw": null, "glfw": null,
"gtk": [
"AudioPause"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6016,6 +7046,9 @@ ...@@ -6016,6 +7046,9 @@
127 127
], ],
"glfw": null, "glfw": null,
"gtk": [
269025073
],
"windows": null "windows": null
} }
}, },
...@@ -6028,6 +7061,9 @@ ...@@ -6028,6 +7061,9 @@
"english": "Media Record", "english": "Media Record",
"chromium": "mediaRecord", "chromium": "mediaRecord",
"glfw": null, "glfw": null,
"gtk": [
"AudioRecord"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6045,6 +7081,9 @@ ...@@ -6045,6 +7081,9 @@
130 130
], ],
"glfw": null, "glfw": null,
"gtk": [
269025052
],
"windows": null "windows": null
} }
}, },
...@@ -6057,6 +7096,9 @@ ...@@ -6057,6 +7096,9 @@
"english": "Media Fast Forward", "english": "Media Fast Forward",
"chromium": "mediaFastForward", "chromium": "mediaFastForward",
"glfw": null, "glfw": null,
"gtk": [
"AudioForward"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6074,6 +7116,9 @@ ...@@ -6074,6 +7116,9 @@
90 90
], ],
"glfw": null, "glfw": null,
"gtk": [
269025175
],
"windows": null "windows": null
} }
}, },
...@@ -6086,6 +7131,9 @@ ...@@ -6086,6 +7131,9 @@
"english": "Media Rewind", "english": "Media Rewind",
"chromium": "mediaRewind", "chromium": "mediaRewind",
"glfw": null, "glfw": null,
"gtk": [
"AudioRewind"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6103,6 +7151,9 @@ ...@@ -6103,6 +7151,9 @@
89 89
], ],
"glfw": null, "glfw": null,
"gtk": [
269025086
],
"windows": null "windows": null
} }
}, },
...@@ -6115,6 +7166,9 @@ ...@@ -6115,6 +7166,9 @@
"english": "Media Track Next", "english": "Media Track Next",
"chromium": "mediaTrackNext", "chromium": "mediaTrackNext",
"glfw": null, "glfw": null,
"gtk": [
"AudioNext"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6132,6 +7186,9 @@ ...@@ -6132,6 +7186,9 @@
87 87
], ],
"glfw": null, "glfw": null,
"gtk": [
269025047
],
"windows": null "windows": null
} }
}, },
...@@ -6144,6 +7201,9 @@ ...@@ -6144,6 +7201,9 @@
"english": "Media Track Previous", "english": "Media Track Previous",
"chromium": "mediaTrackPrevious", "chromium": "mediaTrackPrevious",
"glfw": null, "glfw": null,
"gtk": [
"AudioPrev"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6161,6 +7221,9 @@ ...@@ -6161,6 +7221,9 @@
88 88
], ],
"glfw": null, "glfw": null,
"gtk": [
269025046
],
"windows": null "windows": null
} }
}, },
...@@ -6173,6 +7236,9 @@ ...@@ -6173,6 +7236,9 @@
"english": "Media Stop", "english": "Media Stop",
"chromium": "mediaStop", "chromium": "mediaStop",
"glfw": null, "glfw": null,
"gtk": [
"AudioStop"
],
"windows": [ "windows": [
"MEDIA_STOP" "MEDIA_STOP"
] ]
...@@ -6193,6 +7259,9 @@ ...@@ -6193,6 +7259,9 @@
86 86
], ],
"glfw": null, "glfw": null,
"gtk": [
269025045
],
"windows": [ "windows": [
178 178
] ]
...@@ -6207,6 +7276,9 @@ ...@@ -6207,6 +7276,9 @@
"english": "Eject", "english": "Eject",
"chromium": "eject", "chromium": "eject",
"glfw": null, "glfw": null,
"gtk": [
"Eject"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6225,6 +7297,9 @@ ...@@ -6225,6 +7297,9 @@
129 129
], ],
"glfw": null, "glfw": null,
"gtk": [
269025068
],
"windows": null "windows": null
} }
}, },
...@@ -6237,6 +7312,7 @@ ...@@ -6237,6 +7312,7 @@
"english": "Media Play Pause", "english": "Media Play Pause",
"chromium": "mediaPlayPause", "chromium": "mediaPlayPause",
"glfw": null, "glfw": null,
"gtk": null,
"windows": [ "windows": [
"MEDIA_PLAY_PAUSE" "MEDIA_PLAY_PAUSE"
] ]
...@@ -6256,6 +7332,7 @@ ...@@ -6256,6 +7332,7 @@
85 85
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": [ "windows": [
179 179
] ]
...@@ -6268,6 +7345,7 @@ ...@@ -6268,6 +7345,7 @@
"english": "Speech Input Toggle", "english": "Speech Input Toggle",
"chromium": "speechInputToggle", "chromium": "speechInputToggle",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6281,6 +7359,7 @@ ...@@ -6281,6 +7359,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -6293,6 +7372,7 @@ ...@@ -6293,6 +7372,7 @@
"english": "Bass Boost", "english": "Bass Boost",
"chromium": "bassBoost", "chromium": "bassBoost",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6308,6 +7388,7 @@ ...@@ -6308,6 +7388,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -6318,6 +7399,7 @@ ...@@ -6318,6 +7399,7 @@
"english": "Media Select", "english": "Media Select",
"chromium": "mediaSelect", "chromium": "mediaSelect",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6331,6 +7413,7 @@ ...@@ -6331,6 +7413,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -6341,6 +7424,7 @@ ...@@ -6341,6 +7424,7 @@
"english": "Launch Word Processor", "english": "Launch Word Processor",
"chromium": "launchWordProcessor", "chromium": "launchWordProcessor",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6354,6 +7438,7 @@ ...@@ -6354,6 +7438,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -6364,6 +7449,7 @@ ...@@ -6364,6 +7449,7 @@
"english": "Launch Spreadsheet", "english": "Launch Spreadsheet",
"chromium": "launchSpreadsheet", "chromium": "launchSpreadsheet",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6377,6 +7463,7 @@ ...@@ -6377,6 +7463,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -6389,6 +7476,9 @@ ...@@ -6389,6 +7476,9 @@
"english": "Launch Mail", "english": "Launch Mail",
"chromium": "launchMail", "chromium": "launchMail",
"glfw": null, "glfw": null,
"gtk": [
"Mail"
],
"windows": [ "windows": [
"LAUNCH_MAIL" "LAUNCH_MAIL"
] ]
...@@ -6409,6 +7499,9 @@ ...@@ -6409,6 +7499,9 @@
65 65
], ],
"glfw": null, "glfw": null,
"gtk": [
269025049
],
"windows": [ "windows": [
180 180
] ]
...@@ -6423,6 +7516,7 @@ ...@@ -6423,6 +7516,7 @@
"english": "Launch Contacts", "english": "Launch Contacts",
"chromium": "launchContacts", "chromium": "launchContacts",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6440,6 +7534,7 @@ ...@@ -6440,6 +7534,7 @@
207 207
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -6452,6 +7547,9 @@ ...@@ -6452,6 +7547,9 @@
"english": "Launch Calendar", "english": "Launch Calendar",
"chromium": "launchCalendar", "chromium": "launchCalendar",
"glfw": null, "glfw": null,
"gtk": [
"Calendar"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6469,6 +7567,9 @@ ...@@ -6469,6 +7567,9 @@
208 208
], ],
"glfw": null, "glfw": null,
"gtk": [
269025056
],
"windows": null "windows": null
} }
}, },
...@@ -6479,6 +7580,7 @@ ...@@ -6479,6 +7580,7 @@
"english": "Launch App2", "english": "Launch App2",
"chromium": "launchApp2", "chromium": "launchApp2",
"glfw": null, "glfw": null,
"gtk": null,
"windows": [ "windows": [
"LAUNCH_APP2" "LAUNCH_APP2"
] ]
...@@ -6494,6 +7596,7 @@ ...@@ -6494,6 +7596,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": [ "windows": [
183 183
] ]
...@@ -6506,6 +7609,7 @@ ...@@ -6506,6 +7609,7 @@
"english": "Launch App1", "english": "Launch App1",
"chromium": "launchApp1", "chromium": "launchApp1",
"glfw": null, "glfw": null,
"gtk": null,
"windows": [ "windows": [
"LAUNCH_APP1" "LAUNCH_APP1"
] ]
...@@ -6521,6 +7625,7 @@ ...@@ -6521,6 +7625,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": [ "windows": [
182 182
] ]
...@@ -6533,6 +7638,9 @@ ...@@ -6533,6 +7638,9 @@
"english": "Launch Internet Browser", "english": "Launch Internet Browser",
"chromium": "launchInternetBrowser", "chromium": "launchInternetBrowser",
"glfw": null, "glfw": null,
"gtk": [
"WWW"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6546,6 +7654,9 @@ ...@@ -6546,6 +7654,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
269025070
],
"windows": null "windows": null
} }
}, },
...@@ -6556,6 +7667,9 @@ ...@@ -6556,6 +7667,9 @@
"english": "Log Off", "english": "Log Off",
"chromium": "logOff", "chromium": "logOff",
"glfw": null, "glfw": null,
"gtk": [
"LogOff"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6569,6 +7683,9 @@ ...@@ -6569,6 +7683,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
269025121
],
"windows": null "windows": null
} }
}, },
...@@ -6579,6 +7696,7 @@ ...@@ -6579,6 +7696,7 @@
"english": "Lock Screen", "english": "Lock Screen",
"chromium": "lockScreen", "chromium": "lockScreen",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6592,6 +7710,7 @@ ...@@ -6592,6 +7710,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -6602,6 +7721,7 @@ ...@@ -6602,6 +7721,7 @@
"english": "Launch Control Panel", "english": "Launch Control Panel",
"chromium": "launchControlPanel", "chromium": "launchControlPanel",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6615,6 +7735,7 @@ ...@@ -6615,6 +7735,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -6625,6 +7746,7 @@ ...@@ -6625,6 +7746,7 @@
"english": "Select Task", "english": "Select Task",
"chromium": "selectTask", "chromium": "selectTask",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6638,6 +7760,7 @@ ...@@ -6638,6 +7760,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -6648,6 +7771,9 @@ ...@@ -6648,6 +7771,9 @@
"english": "Launch Documents", "english": "Launch Documents",
"chromium": "launchDocuments", "chromium": "launchDocuments",
"glfw": null, "glfw": null,
"gtk": [
"Document"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6661,6 +7787,7 @@ ...@@ -6661,6 +7787,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -6671,6 +7798,9 @@ ...@@ -6671,6 +7798,9 @@
"english": "Spell Check", "english": "Spell Check",
"chromium": "spellCheck", "chromium": "spellCheck",
"glfw": null, "glfw": null,
"gtk": [
"Spell"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6684,6 +7814,9 @@ ...@@ -6684,6 +7814,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
269025148
],
"windows": null "windows": null
} }
}, },
...@@ -6694,6 +7827,7 @@ ...@@ -6694,6 +7827,7 @@
"english": "Launch Keyboard Layout", "english": "Launch Keyboard Layout",
"chromium": "launchKeyboardLayout", "chromium": "launchKeyboardLayout",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6707,6 +7841,7 @@ ...@@ -6707,6 +7841,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -6717,6 +7852,9 @@ ...@@ -6717,6 +7852,9 @@
"english": "Launch Screen Saver", "english": "Launch Screen Saver",
"chromium": "launchScreenSaver", "chromium": "launchScreenSaver",
"glfw": null, "glfw": null,
"gtk": [
"ScreenSaver"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6730,6 +7868,9 @@ ...@@ -6730,6 +7868,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
269025069
],
"windows": null "windows": null
} }
}, },
...@@ -6742,6 +7883,7 @@ ...@@ -6742,6 +7883,7 @@
"english": "Launch Assistant", "english": "Launch Assistant",
"chromium": "launchAssistant", "chromium": "launchAssistant",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6757,6 +7899,7 @@ ...@@ -6757,6 +7899,7 @@
219 219
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -6767,6 +7910,9 @@ ...@@ -6767,6 +7910,9 @@
"english": "Launch Audio Browser", "english": "Launch Audio Browser",
"chromium": "launchAudioBrowser", "chromium": "launchAudioBrowser",
"glfw": null, "glfw": null,
"gtk": [
"Music"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6780,6 +7926,9 @@ ...@@ -6780,6 +7926,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
269025170
],
"windows": null "windows": null
} }
}, },
...@@ -6792,6 +7941,9 @@ ...@@ -6792,6 +7941,9 @@
"english": "New Key", "english": "New Key",
"chromium": "new", "chromium": "new",
"glfw": null, "glfw": null,
"gtk": [
"New"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6807,6 +7959,9 @@ ...@@ -6807,6 +7959,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
269025128
],
"windows": null "windows": null
} }
}, },
...@@ -6820,6 +7975,9 @@ ...@@ -6820,6 +7975,9 @@
"english": "Close", "english": "Close",
"chromium": "close", "chromium": "close",
"glfw": null, "glfw": null,
"gtk": [
"Close"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6838,6 +7996,9 @@ ...@@ -6838,6 +7996,9 @@
128 128
], ],
"glfw": null, "glfw": null,
"gtk": [
269025110
],
"windows": null "windows": null
} }
}, },
...@@ -6848,6 +8009,9 @@ ...@@ -6848,6 +8009,9 @@
"english": "Save", "english": "Save",
"chromium": "save", "chromium": "save",
"glfw": null, "glfw": null,
"gtk": [
"Save"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -6861,6 +8025,9 @@ ...@@ -6861,6 +8025,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
269025143
],
"windows": null "windows": null
} }
}, },
...@@ -6873,6 +8040,9 @@ ...@@ -6873,6 +8040,9 @@
"english": "Print", "english": "Print",
"chromium": "print", "chromium": "print",
"glfw": null, "glfw": null,
"gtk": [
"Print"
],
"windows": [ "windows": [
"PRINT" "PRINT"
] ]
...@@ -6890,6 +8060,9 @@ ...@@ -6890,6 +8060,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
65377
],
"windows": [ "windows": [
42 42
] ]
...@@ -6904,6 +8077,9 @@ ...@@ -6904,6 +8077,9 @@
"english": "Browser Search", "english": "Browser Search",
"chromium": "browserSearch", "chromium": "browserSearch",
"glfw": null, "glfw": null,
"gtk": [
"Search"
],
"windows": [ "windows": [
"BROWSER_SEARCH" "BROWSER_SEARCH"
] ]
...@@ -6923,6 +8099,9 @@ ...@@ -6923,6 +8099,9 @@
84 84
], ],
"glfw": null, "glfw": null,
"gtk": [
269025051
],
"windows": [ "windows": [
170 170
] ]
...@@ -6935,6 +8114,9 @@ ...@@ -6935,6 +8114,9 @@
"english": "Browser Home", "english": "Browser Home",
"chromium": "browserHome", "chromium": "browserHome",
"glfw": null, "glfw": null,
"gtk": [
"HomePage"
],
"windows": [ "windows": [
"BROWSER_HOME" "BROWSER_HOME"
] ]
...@@ -6950,6 +8132,9 @@ ...@@ -6950,6 +8132,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
269025048
],
"windows": [ "windows": [
172 172
] ]
...@@ -6962,6 +8147,9 @@ ...@@ -6962,6 +8147,9 @@
"english": "Browser Back", "english": "Browser Back",
"chromium": "browserBack", "chromium": "browserBack",
"glfw": null, "glfw": null,
"gtk": [
"Back"
],
"windows": [ "windows": [
"BROWSER_BACK" "BROWSER_BACK"
] ]
...@@ -6977,6 +8165,9 @@ ...@@ -6977,6 +8165,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
269025062
],
"windows": [ "windows": [
166 166
] ]
...@@ -6991,6 +8182,9 @@ ...@@ -6991,6 +8182,9 @@
"english": "Browser Forward", "english": "Browser Forward",
"chromium": "browserForward", "chromium": "browserForward",
"glfw": null, "glfw": null,
"gtk": [
"Forward"
],
"windows": [ "windows": [
"BROWSER_FORWARD" "BROWSER_FORWARD"
] ]
...@@ -7010,6 +8204,9 @@ ...@@ -7010,6 +8204,9 @@
125 125
], ],
"glfw": null, "glfw": null,
"gtk": [
269025063
],
"windows": [ "windows": [
167 167
] ]
...@@ -7022,6 +8219,9 @@ ...@@ -7022,6 +8219,9 @@
"english": "Browser Stop", "english": "Browser Stop",
"chromium": "browserStop", "chromium": "browserStop",
"glfw": null, "glfw": null,
"gtk": [
"Stop"
],
"windows": [ "windows": [
"BROWSER_STOP" "BROWSER_STOP"
] ]
...@@ -7037,6 +8237,9 @@ ...@@ -7037,6 +8237,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
269025064
],
"windows": [ "windows": [
169 169
] ]
...@@ -7049,6 +8252,9 @@ ...@@ -7049,6 +8252,9 @@
"english": "Browser Refresh", "english": "Browser Refresh",
"chromium": "browserRefresh", "chromium": "browserRefresh",
"glfw": null, "glfw": null,
"gtk": [
"Refresh"
],
"windows": [ "windows": [
"BROWSER_REFRESH" "BROWSER_REFRESH"
] ]
...@@ -7064,6 +8270,9 @@ ...@@ -7064,6 +8270,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
269025065
],
"windows": [ "windows": [
168 168
] ]
...@@ -7078,6 +8287,9 @@ ...@@ -7078,6 +8287,9 @@
"english": "Browser Favorites", "english": "Browser Favorites",
"chromium": "browserFavorites", "chromium": "browserFavorites",
"glfw": null, "glfw": null,
"gtk": [
"Favorites"
],
"windows": [ "windows": [
"BROWSER_FAVORITES" "BROWSER_FAVORITES"
] ]
...@@ -7097,6 +8309,9 @@ ...@@ -7097,6 +8309,9 @@
174 174
], ],
"glfw": null, "glfw": null,
"gtk": [
269025072
],
"windows": [ "windows": [
171 171
] ]
...@@ -7111,6 +8326,9 @@ ...@@ -7111,6 +8326,9 @@
"english": "Zoom In", "english": "Zoom In",
"chromium": "zoomIn", "chromium": "zoomIn",
"glfw": null, "glfw": null,
"gtk": [
"ZoomIn"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7126,6 +8344,9 @@ ...@@ -7126,6 +8344,9 @@
168 168
], ],
"glfw": null, "glfw": null,
"gtk": [
269025163
],
"windows": null "windows": null
} }
}, },
...@@ -7138,6 +8359,9 @@ ...@@ -7138,6 +8359,9 @@
"english": "Zoom Out", "english": "Zoom Out",
"chromium": "zoomOut", "chromium": "zoomOut",
"glfw": null, "glfw": null,
"gtk": [
"ZoomOut"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7153,6 +8377,9 @@ ...@@ -7153,6 +8377,9 @@
169 169
], ],
"glfw": null, "glfw": null,
"gtk": [
269025164
],
"windows": null "windows": null
} }
}, },
...@@ -7165,6 +8392,7 @@ ...@@ -7165,6 +8392,7 @@
"english": "Zoom Toggle", "english": "Zoom Toggle",
"chromium": "zoomToggle", "chromium": "zoomToggle",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7180,6 +8408,7 @@ ...@@ -7180,6 +8408,7 @@
255 255
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7192,6 +8421,9 @@ ...@@ -7192,6 +8421,9 @@
"english": "Redo", "english": "Redo",
"chromium": "redo", "chromium": "redo",
"glfw": null, "glfw": null,
"gtk": [
"Redo"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7207,6 +8439,9 @@ ...@@ -7207,6 +8439,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
65382
],
"windows": null "windows": null
} }
}, },
...@@ -7217,6 +8452,9 @@ ...@@ -7217,6 +8452,9 @@
"english": "Mail Reply", "english": "Mail Reply",
"chromium": "mailReply", "chromium": "mailReply",
"glfw": null, "glfw": null,
"gtk": [
"Reply"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7230,6 +8468,9 @@ ...@@ -7230,6 +8468,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
269025138
],
"windows": null "windows": null
} }
}, },
...@@ -7240,6 +8481,9 @@ ...@@ -7240,6 +8481,9 @@
"english": "Mail Forward", "english": "Mail Forward",
"chromium": "mailForward", "chromium": "mailForward",
"glfw": null, "glfw": null,
"gtk": [
"MailForward"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7253,6 +8497,9 @@ ...@@ -7253,6 +8497,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
269025168
],
"windows": null "windows": null
} }
}, },
...@@ -7263,6 +8510,9 @@ ...@@ -7263,6 +8510,9 @@
"english": "Mail Send", "english": "Mail Send",
"chromium": "mailSend", "chromium": "mailSend",
"glfw": null, "glfw": null,
"gtk": [
"Send"
],
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7276,6 +8526,9 @@ ...@@ -7276,6 +8526,9 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": [
269025147
],
"windows": null "windows": null
} }
}, },
...@@ -7286,6 +8539,7 @@ ...@@ -7286,6 +8539,7 @@
"english": "Keyboard Layout Select", "english": "Keyboard Layout Select",
"chromium": "keyboardLayoutSelect", "chromium": "keyboardLayoutSelect",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7299,6 +8553,7 @@ ...@@ -7299,6 +8553,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7309,6 +8564,7 @@ ...@@ -7309,6 +8564,7 @@
"english": "Show All Windows", "english": "Show All Windows",
"chromium": "showAllWindows", "chromium": "showAllWindows",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7322,6 +8578,7 @@ ...@@ -7322,6 +8578,7 @@
"keyCodes": { "keyCodes": {
"android": null, "android": null,
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7334,6 +8591,7 @@ ...@@ -7334,6 +8591,7 @@
"english": "Game Button 1", "english": "Game Button 1",
"chromium": "button1", "chromium": "button1",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7352,6 +8610,7 @@ ...@@ -7352,6 +8610,7 @@
188 188
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7364,6 +8623,7 @@ ...@@ -7364,6 +8623,7 @@
"english": "Game Button 2", "english": "Game Button 2",
"chromium": "button2", "chromium": "button2",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7382,6 +8642,7 @@ ...@@ -7382,6 +8642,7 @@
189 189
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7394,6 +8655,7 @@ ...@@ -7394,6 +8655,7 @@
"english": "Game Button 3", "english": "Game Button 3",
"chromium": "button3", "chromium": "button3",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7412,6 +8674,7 @@ ...@@ -7412,6 +8674,7 @@
190 190
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7424,6 +8687,7 @@ ...@@ -7424,6 +8687,7 @@
"english": "Game Button 4", "english": "Game Button 4",
"chromium": "button4", "chromium": "button4",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7442,6 +8706,7 @@ ...@@ -7442,6 +8706,7 @@
191 191
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7454,6 +8719,7 @@ ...@@ -7454,6 +8719,7 @@
"english": "Game Button 5", "english": "Game Button 5",
"chromium": "button5", "chromium": "button5",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7472,6 +8738,7 @@ ...@@ -7472,6 +8738,7 @@
192 192
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7484,6 +8751,7 @@ ...@@ -7484,6 +8751,7 @@
"english": "Game Button 6", "english": "Game Button 6",
"chromium": "button6", "chromium": "button6",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7502,6 +8770,7 @@ ...@@ -7502,6 +8770,7 @@
193 193
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7514,6 +8783,7 @@ ...@@ -7514,6 +8783,7 @@
"english": "Game Button 7", "english": "Game Button 7",
"chromium": "button7", "chromium": "button7",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7532,6 +8802,7 @@ ...@@ -7532,6 +8802,7 @@
194 194
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7544,6 +8815,7 @@ ...@@ -7544,6 +8815,7 @@
"english": "Game Button 8", "english": "Game Button 8",
"chromium": "button8", "chromium": "button8",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7562,6 +8834,7 @@ ...@@ -7562,6 +8834,7 @@
195 195
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7574,6 +8847,7 @@ ...@@ -7574,6 +8847,7 @@
"english": "Game Button 9", "english": "Game Button 9",
"chromium": "button9", "chromium": "button9",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7592,6 +8866,7 @@ ...@@ -7592,6 +8866,7 @@
196 196
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7604,6 +8879,7 @@ ...@@ -7604,6 +8879,7 @@
"english": "Game Button 10", "english": "Game Button 10",
"chromium": "button10", "chromium": "button10",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7622,6 +8898,7 @@ ...@@ -7622,6 +8898,7 @@
197 197
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7634,6 +8911,7 @@ ...@@ -7634,6 +8911,7 @@
"english": "Game Button 11", "english": "Game Button 11",
"chromium": "button11", "chromium": "button11",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7652,6 +8930,7 @@ ...@@ -7652,6 +8930,7 @@
198 198
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7664,6 +8943,7 @@ ...@@ -7664,6 +8943,7 @@
"english": "Game Button 12", "english": "Game Button 12",
"chromium": "button12", "chromium": "button12",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7682,6 +8962,7 @@ ...@@ -7682,6 +8962,7 @@
199 199
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7694,6 +8975,7 @@ ...@@ -7694,6 +8975,7 @@
"english": "Game Button 13", "english": "Game Button 13",
"chromium": "button13", "chromium": "button13",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7712,6 +8994,7 @@ ...@@ -7712,6 +8994,7 @@
200 200
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7724,6 +9007,7 @@ ...@@ -7724,6 +9007,7 @@
"english": "Game Button 14", "english": "Game Button 14",
"chromium": "button14", "chromium": "button14",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7742,6 +9026,7 @@ ...@@ -7742,6 +9026,7 @@
201 201
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7754,6 +9039,7 @@ ...@@ -7754,6 +9039,7 @@
"english": "Game Button 15", "english": "Game Button 15",
"chromium": "button15", "chromium": "button15",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7772,6 +9058,7 @@ ...@@ -7772,6 +9058,7 @@
202 202
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7784,6 +9071,7 @@ ...@@ -7784,6 +9071,7 @@
"english": "Game Button 16", "english": "Game Button 16",
"chromium": "button16", "chromium": "button16",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7802,6 +9090,7 @@ ...@@ -7802,6 +9090,7 @@
203 203
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7814,6 +9103,7 @@ ...@@ -7814,6 +9103,7 @@
"english": "Game Button A", "english": "Game Button A",
"chromium": "buttonA", "chromium": "buttonA",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7831,6 +9121,7 @@ ...@@ -7831,6 +9121,7 @@
96 96
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7843,6 +9134,7 @@ ...@@ -7843,6 +9134,7 @@
"english": "Game Button B", "english": "Game Button B",
"chromium": "buttonB", "chromium": "buttonB",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7860,6 +9152,7 @@ ...@@ -7860,6 +9152,7 @@
97 97
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7872,6 +9165,7 @@ ...@@ -7872,6 +9165,7 @@
"english": "Game Button C", "english": "Game Button C",
"chromium": "buttonC", "chromium": "buttonC",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7889,6 +9183,7 @@ ...@@ -7889,6 +9183,7 @@
98 98
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7901,6 +9196,7 @@ ...@@ -7901,6 +9196,7 @@
"english": "Game Button Left 1", "english": "Game Button Left 1",
"chromium": "buttonL1", "chromium": "buttonL1",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7918,6 +9214,7 @@ ...@@ -7918,6 +9214,7 @@
102 102
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7930,6 +9227,7 @@ ...@@ -7930,6 +9227,7 @@
"english": "Game Button Left 2", "english": "Game Button Left 2",
"chromium": "buttonL2", "chromium": "buttonL2",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7947,6 +9245,7 @@ ...@@ -7947,6 +9245,7 @@
104 104
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7959,6 +9258,7 @@ ...@@ -7959,6 +9258,7 @@
"english": "Game Button Mode", "english": "Game Button Mode",
"chromium": "buttonMode", "chromium": "buttonMode",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -7976,6 +9276,7 @@ ...@@ -7976,6 +9276,7 @@
110 110
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -7988,6 +9289,7 @@ ...@@ -7988,6 +9289,7 @@
"english": "Game Button Right 1", "english": "Game Button Right 1",
"chromium": "buttonR1", "chromium": "buttonR1",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -8005,6 +9307,7 @@ ...@@ -8005,6 +9307,7 @@
103 103
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -8017,6 +9320,7 @@ ...@@ -8017,6 +9320,7 @@
"english": "Game Button Right 2", "english": "Game Button Right 2",
"chromium": "buttonR2", "chromium": "buttonR2",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -8034,6 +9338,7 @@ ...@@ -8034,6 +9338,7 @@
105 105
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -8046,6 +9351,7 @@ ...@@ -8046,6 +9351,7 @@
"english": "Game Button Select", "english": "Game Button Select",
"chromium": "buttonSelect", "chromium": "buttonSelect",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -8063,6 +9369,7 @@ ...@@ -8063,6 +9369,7 @@
109 109
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -8075,6 +9382,7 @@ ...@@ -8075,6 +9382,7 @@
"english": "Game Button Start", "english": "Game Button Start",
"chromium": "buttonStart", "chromium": "buttonStart",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -8092,6 +9400,7 @@ ...@@ -8092,6 +9400,7 @@
108 108
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -8104,6 +9413,7 @@ ...@@ -8104,6 +9413,7 @@
"english": "Game Button Thumb Left", "english": "Game Button Thumb Left",
"chromium": "buttonThumbl", "chromium": "buttonThumbl",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -8121,6 +9431,7 @@ ...@@ -8121,6 +9431,7 @@
106 106
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -8133,6 +9444,7 @@ ...@@ -8133,6 +9444,7 @@
"english": "Game Button Thumb Right", "english": "Game Button Thumb Right",
"chromium": "buttonThumbr", "chromium": "buttonThumbr",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -8150,6 +9462,7 @@ ...@@ -8150,6 +9462,7 @@
107 107
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -8162,6 +9475,7 @@ ...@@ -8162,6 +9475,7 @@
"english": "Game Button X", "english": "Game Button X",
"chromium": "buttonX", "chromium": "buttonX",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -8179,6 +9493,7 @@ ...@@ -8179,6 +9493,7 @@
99 99
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -8191,6 +9506,7 @@ ...@@ -8191,6 +9506,7 @@
"english": "Game Button Y", "english": "Game Button Y",
"chromium": "buttonY", "chromium": "buttonY",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -8208,6 +9524,7 @@ ...@@ -8208,6 +9524,7 @@
100 100
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -8220,6 +9537,7 @@ ...@@ -8220,6 +9537,7 @@
"english": "Game Button Z", "english": "Game Button Z",
"chromium": "buttonZ", "chromium": "buttonZ",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -8237,6 +9555,7 @@ ...@@ -8237,6 +9555,7 @@
101 101
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
}, },
...@@ -8249,6 +9568,7 @@ ...@@ -8249,6 +9568,7 @@
"english": "Fn", "english": "Fn",
"chromium": "fn", "chromium": "fn",
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
}, },
"scanCodes": { "scanCodes": {
...@@ -8266,6 +9586,7 @@ ...@@ -8266,6 +9586,7 @@
119 119
], ],
"glfw": null, "glfw": null,
"gtk": null,
"windows": null "windows": null
} }
} }
......
{
"altLeft": ["Alt_L"],
"altRight": ["Alt_R"],
"arrowDown": ["Down", "KP_Down"],
"arrowLeft": ["Left", "KP_Left"],
"arrowRight": ["Right", "KP_Right"],
"arrowUp": ["Up", "KP_Up"],
"audioVolumeDown": ["AudioLowerVolume"],
"audioVolumeMute": ["AudioMute"],
"audioVolumeUp": ["AudioRaiseVolume"],
"backquote": ["quoteleft"],
"backslash": ["backslash"],
"backspace": ["BackSpace"],
"bracketLeft": ["bracketleft"],
"bracketRight": ["bracketright"],
"brightnessDown": ["MonBrightnessDown"],
"brightnessUp": ["MonBrightnessUp"],
"browserBack": ["Back"],
"browserFavorites": ["Favorites"],
"browserFavourites": ["Favourites"],
"browserForward": ["Forward"],
"browserHome": ["HomePage"],
"browserRefresh": ["Refresh"],
"browserSearch": ["Search"],
"browserStop": ["Stop"],
"capsLock": ["Caps_Lock"],
"close": ["Close"],
"comma": ["comma"],
"contextMenu": ["Menu"],
"controlLeft": ["Control_L"],
"controlRight": ["Control_R"],
"copy": ["Copy", "3270_Copy"],
"delete": ["Delete", "KP_Delete"],
"digit0": ["0"],
"digit1": ["1"],
"digit2": ["2"],
"digit3": ["3"],
"digit4": ["4"],
"digit5": ["5"],
"digit6": ["6"],
"digit7": ["7"],
"digit8": ["8"],
"digit9": ["9"],
"eject": ["Eject"],
"end": ["End", "KP_End"],
"enter": ["Return", "Enter"],
"equal": ["equal"],
"escape": ["Escape"],
"f1": ["F1", "KP_F1"],
"f2": ["F2", "KP_F2"],
"f3": ["F3", "KP_F3"],
"f4": ["F4", "KP_F4"],
"f5": ["F5"],
"f6": ["F6"],
"f7": ["F7"],
"f8": ["F8"],
"f9": ["F9"],
"f10": ["F10"],
"f11": ["F11"],
"f12": ["F12"],
"f13": ["F13"],
"f14": ["F14"],
"f15": ["F15"],
"f16": ["F16"],
"f17": ["F17"],
"f18": ["F18"],
"f19": ["F19"],
"f20": ["F20"],
"f21": ["F21"],
"f22": ["F22"],
"f23": ["F23"],
"f24": ["F24"],
"f25": ["F25"],
"find": ["Find"],
"help": ["Help"],
"home": ["Home", "KP_Home"],
"hyper": ["Hyper_L", "Hyper_R"],
"insert": ["Insert", "KP_Insert"],
"intlYen": ["yen"],
"kanaMode": ["kana_switch"],
"kbdIllumDown": ["KbdBrightnessDown"],
"kbdIllumUp": ["KbdBrightnessUp"],
"keyA": ["A"],
"keyB": ["B"],
"keyC": ["C"],
"keyD": ["D"],
"keyE": ["E"],
"keyF": ["F"],
"keyG": ["G"],
"keyH": ["H"],
"keyI": ["I"],
"keyJ": ["J"],
"keyK": ["K"],
"keyL": ["L"],
"keyM": ["M"],
"keyN": ["N"],
"keyO": ["O"],
"keyP": ["P"],
"keyQ": ["Q"],
"keyR": ["R"],
"keyS": ["S"],
"keyT": ["T"],
"keyU": ["U"],
"keyV": ["V"],
"keyW": ["W"],
"keyX": ["X"],
"keyY": ["Y"],
"keyZ": ["Z"],
"launchAudioBrowser": ["Music"],
"launchCalendar": ["Calendar"],
"launchDocuments": ["Document"],
"launchInternetBrowser": ["WWW"],
"launchMail": ["Mail"],
"launchPhone": ["Phone"],
"launchScreenSaver": ["ScreenSaver"],
"logOff": ["LogOff"],
"mailForward": ["MailForward"],
"mailReply": ["Reply"],
"mailSend": ["Send"],
"mediaFastForward": ["AudioForward"],
"mediaPause": ["AudioPause"],
"mediaPlay": ["AudioPlay", "3270_Play"],
"mediaRecord": ["AudioRecord"],
"mediaRewind": ["AudioRewind"],
"mediaStop": ["AudioStop"],
"mediaTrackNext": ["AudioNext"],
"mediaTrackPrevious": ["AudioPrev"],
"metaLeft": ["Meta_L"],
"metaRight": ["Meta_R"],
"minus": ["minus"],
"newKey": ["New"],
"numLock": ["Num_Lock"],
"numpad0": ["KP_0"],
"numpad1": ["KP_1"],
"numpad2": ["KP_2"],
"numpad3": ["KP_3"],
"numpad4": ["KP_4"],
"numpad5": ["KP_5"],
"numpad6": ["KP_6"],
"numpad7": ["KP_7"],
"numpad8": ["KP_8"],
"numpad9": ["KP_9"],
"numpadAdd": ["KP_Add"],
"numpadDecimal": ["KP_Decimal"],
"numpadDivide": ["KP_Divide"],
"numpadEnter": ["KP_Enter"],
"numpadEqual": ["KP_Equal"],
"numpadMultiply": ["KP_Multiply"],
"numpadSubtract": ["KP_Subtract"],
"open": ["Open"],
"pageDown": ["Page_Down", "KP_Page_Down"],
"pageUp": ["Page_Up", "KP_Page_Up"],
"paste": ["Paste"],
"pause": ["Pause"],
"period": ["period"],
"power": ["PowerOff"],
"print": ["Print"],
"printScreen": ["3270_PrintScreen"],
"quote": ["apostrophe"],
"redo": ["Redo"],
"resume": ["Resume"],
"save": ["Save"],
"scrollLock": ["Scroll_Lock"],
"select": ["Select"],
"semicolon": ["semicolon"],
"shiftLeft": ["Shift_L"],
"shiftRight": ["Shift_R"],
"slash": ["slash"],
"sleep": ["Sleep"],
"space": ["space", "KP_Space"],
"spellCheck": ["Spell"],
"superKey": ["Super_L", "Super_R"],
"suspend": ["Suspend"],
"tab": ["Tab", "KP_Tab"],
"undo": ["Undo"],
"wakeUp": ["WakeUp"],
"zoomIn": ["ZoomIn"],
"zoomOut": ["ZoomOut"]
}
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <map>
// DO NOT EDIT -- DO NOT EDIT -- DO NOT EDIT
// This file is generated by flutter/flutter@dev/tools/gen_keycodes/bin/gen_keycodes.dart and
// should not be edited directly.
//
// Edit the template dev/tools/gen_keycodes/data/keyboard_maps_gtk_cxx.tmpl instead.
// See dev/tools/gen_keycodes/README.md for more information.
/// Maps GTK-specific key codes to the matching [LogicalKeyboardKey].
const std::map<int, int> g_gtk_to_logical_key = {
@@@GTK_KEY_CODE_MAP@@@
};
/// A map of GTK key codes which have printable representations, but appear
/// on the number pad. Used to provide different key objects for keys like
/// KEY_EQUALS and NUMPAD_EQUALS.
const std::map<int, int> g_gtk_numpad_map = {
@@@GTK_NUMPAD_MAP@@@
};
...@@ -71,6 +71,18 @@ const Map<int, LogicalKeyboardKey> kGlfwNumpadMap = <int, LogicalKeyboardKey>{ ...@@ -71,6 +71,18 @@ const Map<int, LogicalKeyboardKey> kGlfwNumpadMap = <int, LogicalKeyboardKey>{
@@@GLFW_NUMPAD_MAP@@@ @@@GLFW_NUMPAD_MAP@@@
}; };
/// Maps GTK-specific key codes to the matching [LogicalKeyboardKey].
const Map<int, LogicalKeyboardKey> kGtkToLogicalKey = <int, LogicalKeyboardKey>{
@@@GTK_KEY_CODE_MAP@@@
};
/// A map of GTK key codes which have printable representations, but appear
/// on the number pad. Used to provide different key objects for keys like
/// KEY_EQUALS and NUMPAD_EQUALS.
const Map<int, LogicalKeyboardKey> kGtkNumpadMap = <int, LogicalKeyboardKey>{
@@@GTK_NUMPAD_MAP@@@
};
/// Maps XKB specific key code values representing [PhysicalKeyboardKey]. /// Maps XKB specific key code values representing [PhysicalKeyboardKey].
const Map<int, PhysicalKeyboardKey> kLinuxToPhysicalKey = <int, PhysicalKeyboardKey>{ const Map<int, PhysicalKeyboardKey> kLinuxToPhysicalKey = <int, PhysicalKeyboardKey>{
@@@XKB_SCAN_CODE_MAP@@@ @@@XKB_SCAN_CODE_MAP@@@
......
...@@ -175,6 +175,32 @@ $otherComments static const LogicalKeyboardKey $constantName = LogicalKeyboardK ...@@ -175,6 +175,32 @@ $otherComments static const LogicalKeyboardKey $constantName = LogicalKeyboardK
return glfwKeyCodeMap.toString().trimRight(); return glfwKeyCodeMap.toString().trimRight();
} }
/// This generates the map of GTK number pad key codes to logical keys.
String get gtkNumpadMap {
final StringBuffer gtkNumpadMap = StringBuffer();
for (final Key entry in numpadKeyData) {
if (entry.gtkKeyCodes != null) {
for (final int code in entry.gtkKeyCodes.cast<int>()) {
gtkNumpadMap.writeln(' $code: LogicalKeyboardKey.${entry.constantName},');
}
}
}
return gtkNumpadMap.toString().trimRight();
}
/// This generates the map of GTK key codes to logical keys.
String get gtkKeyCodeMap {
final StringBuffer gtkKeyCodeMap = StringBuffer();
for (final Key entry in keyData.data) {
if (entry.gtkKeyCodes != null) {
for (final int code in entry.gtkKeyCodes.cast<int>()) {
gtkKeyCodeMap.writeln(' $code: LogicalKeyboardKey.${entry.constantName},');
}
}
}
return gtkKeyCodeMap.toString().trimRight();
}
/// This generates the map of XKB USB HID codes to physical keys. /// This generates the map of XKB USB HID codes to physical keys.
String get xkbScanCodeMap { String get xkbScanCodeMap {
final StringBuffer xkbScanCodeMap = StringBuffer(); final StringBuffer xkbScanCodeMap = StringBuffer();
...@@ -414,6 +440,8 @@ $otherComments static const LogicalKeyboardKey $constantName = LogicalKeyboardK ...@@ -414,6 +440,8 @@ $otherComments static const LogicalKeyboardKey $constantName = LogicalKeyboardK
'MACOS_FUNCTION_KEY_MAP': macOsFunctionKeyMap, 'MACOS_FUNCTION_KEY_MAP': macOsFunctionKeyMap,
'GLFW_KEY_CODE_MAP': glfwKeyCodeMap, 'GLFW_KEY_CODE_MAP': glfwKeyCodeMap,
'GLFW_NUMPAD_MAP': glfwNumpadMap, 'GLFW_NUMPAD_MAP': glfwNumpadMap,
'GTK_KEY_CODE_MAP': gtkKeyCodeMap,
'GTK_NUMPAD_MAP': gtkNumpadMap,
'XKB_SCAN_CODE_MAP': xkbScanCodeMap, 'XKB_SCAN_CODE_MAP': xkbScanCodeMap,
'WEB_LOGICAL_KEY_MAP': webLogicalKeyMap, 'WEB_LOGICAL_KEY_MAP': webLogicalKeyMap,
'WEB_PHYSICAL_KEY_MAP': webPhysicalKeyMap, 'WEB_PHYSICAL_KEY_MAP': webPhysicalKeyMap,
......
...@@ -28,6 +28,8 @@ class KeyData { ...@@ -28,6 +28,8 @@ class KeyData {
String androidNameMap, String androidNameMap,
String glfwKeyCodeHeader, String glfwKeyCodeHeader,
String glfwNameMap, String glfwNameMap,
String gtkKeyCodeHeader,
String gtkNameMap,
String windowsKeyCodeHeader, String windowsKeyCodeHeader,
String windowsNameMap, String windowsNameMap,
) : assert(chromiumHidCodes != null), ) : assert(chromiumHidCodes != null),
...@@ -36,11 +38,14 @@ class KeyData { ...@@ -36,11 +38,14 @@ class KeyData {
assert(androidNameMap != null), assert(androidNameMap != null),
assert(glfwKeyCodeHeader != null), assert(glfwKeyCodeHeader != null),
assert(glfwNameMap != null), assert(glfwNameMap != null),
assert(gtkKeyCodeHeader != null),
assert(gtkNameMap != null),
assert(windowsKeyCodeHeader != null), assert(windowsKeyCodeHeader != null),
assert(windowsNameMap != null) { assert(windowsNameMap != null) {
_nameToAndroidScanCodes = _readAndroidScanCodes(androidKeyboardLayout); _nameToAndroidScanCodes = _readAndroidScanCodes(androidKeyboardLayout);
_nameToAndroidKeyCode = _readAndroidKeyCodes(androidKeyCodeHeader); _nameToAndroidKeyCode = _readAndroidKeyCodes(androidKeyCodeHeader);
_nameToGlfwKeyCode = _readGlfwKeyCodes(glfwKeyCodeHeader); _nameToGlfwKeyCode = _readGlfwKeyCodes(glfwKeyCodeHeader);
_nameToGtkKeyCode = _readGtkKeyCodes(gtkKeyCodeHeader);
_nameToWindowsKeyCode = _readWindowsKeyCodes(windowsKeyCodeHeader); _nameToWindowsKeyCode = _readWindowsKeyCodes(windowsKeyCodeHeader);
// Cast Android dom map // Cast Android dom map
final Map<String, List<dynamic>> dynamicAndroidNames = (json.decode(androidNameMap) as Map<String, dynamic>).cast<String, List<dynamic>>(); final Map<String, List<dynamic>> dynamicAndroidNames = (json.decode(androidNameMap) as Map<String, dynamic>).cast<String, List<dynamic>>();
...@@ -52,6 +57,11 @@ class KeyData { ...@@ -52,6 +57,11 @@ class KeyData {
_nameToGlfwName = dynamicGlfwNames.map<String, List<String>>((String key, List<dynamic> value) { _nameToGlfwName = dynamicGlfwNames.map<String, List<String>>((String key, List<dynamic> value) {
return MapEntry<String, List<String>>(key, value.cast<String>()); return MapEntry<String, List<String>>(key, value.cast<String>());
}); });
// Cast GTK dom map
final Map<String, List<dynamic>> dynamicGtkNames = (json.decode(gtkNameMap) as Map<String, dynamic>).cast<String, List<dynamic>>();
_nameToGtkName = dynamicGtkNames.map<String, List<String>>((String key, List<dynamic> value) {
return MapEntry<String, List<String>>(key, value.cast<String>());
});
// Cast Windows dom map // Cast Windows dom map
final Map<String, List<dynamic>> dynamicWindowsNames = (json.decode(windowsNameMap) as Map<String, dynamic>).cast<String, List<dynamic>>(); final Map<String, List<dynamic>> dynamicWindowsNames = (json.decode(windowsNameMap) as Map<String, dynamic>).cast<String, List<dynamic>>();
_nameToWindowsName = dynamicWindowsNames.map<String, List<String>>((String key, List<dynamic> value) { _nameToWindowsName = dynamicWindowsNames.map<String, List<String>>((String key, List<dynamic> value) {
...@@ -97,6 +107,17 @@ class KeyData { ...@@ -97,6 +107,17 @@ class KeyData {
} }
} }
// GTK key names
entry.gtkKeyNames = _nameToGtkName[entry.constantName]?.cast<String>();
if (entry.gtkKeyNames != null && entry.gtkKeyNames.isNotEmpty) {
for (final String gtkKeyName in entry.gtkKeyNames) {
if (_nameToGtkKeyCode[gtkKeyName] != null) {
entry.gtkKeyCodes ??= <int>[];
entry.gtkKeyCodes.add(_nameToGtkKeyCode[gtkKeyName]);
}
}
}
// Windows key names // Windows key names
entry.windowsKeyNames = _nameToWindowsName[entry.constantName]?.cast<String>(); entry.windowsKeyNames = _nameToWindowsName[entry.constantName]?.cast<String>();
if (entry.windowsKeyNames != null && entry.windowsKeyNames.isNotEmpty) { if (entry.windowsKeyNames != null && entry.windowsKeyNames.isNotEmpty) {
...@@ -133,6 +154,13 @@ class KeyData { ...@@ -133,6 +154,13 @@ class KeyData {
/// JSON. /// JSON.
Map<String, List<String>> _nameToGlfwName; Map<String, List<String>> _nameToGlfwName;
/// The mapping from the Flutter name (e.g. "eject") to the GTK name (e.g.
/// "GDK_KEY_Eject").
///
/// Only populated if data is parsed from the source files, not if parsed from
/// JSON.
Map<String, List<String>> _nameToGtkName;
/// The mapping from the Android name (e.g. "MEDIA_EJECT") to the integer scan /// The mapping from the Android name (e.g. "MEDIA_EJECT") to the integer scan
/// code (physical location) of the key. /// code (physical location) of the key.
/// ///
...@@ -154,6 +182,13 @@ class KeyData { ...@@ -154,6 +182,13 @@ class KeyData {
/// JSON. /// JSON.
Map<String, int> _nameToGlfwKeyCode; Map<String, int> _nameToGlfwKeyCode;
/// The mapping from GTK name (e.g. "GTK_KEY_comma") to the integer key code
/// (logical meaning) of the key.
///
/// Only populated if data is parsed from the source files, not if parsed from
/// JSON.
Map<String, int> _nameToGtkKeyCode;
/// The mapping from Widows name (e.g. "RETURN") to the integer key code /// The mapping from Widows name (e.g. "RETURN") to the integer key code
/// (logical meaning) of the key. /// (logical meaning) of the key.
/// ///
...@@ -244,6 +279,20 @@ class KeyData { ...@@ -244,6 +279,20 @@ class KeyData {
return result; return result;
} }
/// Parses entries from GTK's gdkkeysyms.h key code data file.
///
/// Lines in this file look like this (without the ///):
/// /** Space key. */
/// #define GDK_KEY_space 0x020
Map<String, int> _readGtkKeyCodes(String headerFile) {
final RegExp definedCodes = RegExp(r'#define GDK_KEY_([a-zA-Z0-9_]+)\s*0x([0-9a-f]+),?');
final Map<String, int> replaced = <String, int>{};
for (final Match match in definedCodes.allMatches(headerFile)) {
replaced[match.group(1)] = int.parse(match.group(2), radix: 16);
}
return replaced;
}
Map<String, int> _readWindowsKeyCodes(String headerFile) { Map<String, int> _readWindowsKeyCodes(String headerFile) {
final RegExp definedCodes = RegExp(r'define VK_([A-Z0-9_]+)\s*([A-Z0-9_x]+),?'); final RegExp definedCodes = RegExp(r'define VK_([A-Z0-9_]+)\s*([A-Z0-9_x]+),?');
final Map<String, int> replaced = <String, int>{}; final Map<String, int> replaced = <String, int>{};
...@@ -332,6 +381,8 @@ class Key { ...@@ -332,6 +381,8 @@ class Key {
this.androidKeyCodes, this.androidKeyCodes,
this.glfwKeyNames, this.glfwKeyNames,
this.glfwKeyCodes, this.glfwKeyCodes,
this.gtkKeyNames,
this.gtkKeyCodes,
}) : assert(usbHidCode != null), }) : assert(usbHidCode != null),
assert(chromiumName != null), assert(chromiumName != null),
_constantName = enumName; _constantName = enumName;
...@@ -354,6 +405,8 @@ class Key { ...@@ -354,6 +405,8 @@ class Key {
macOsScanCode: map['scanCodes']['macos'] as int, macOsScanCode: map['scanCodes']['macos'] as int,
glfwKeyNames: (map['names']['glfw'] as List<dynamic>)?.cast<String>(), glfwKeyNames: (map['names']['glfw'] as List<dynamic>)?.cast<String>(),
glfwKeyCodes: (map['keyCodes']['glfw'] as List<dynamic>)?.cast<int>(), glfwKeyCodes: (map['keyCodes']['glfw'] as List<dynamic>)?.cast<int>(),
gtkKeyNames: (map['names']['gtk'] as List<dynamic>)?.cast<String>(),
gtkKeyCodes: (map['keyCodes']['gtk'] as List<dynamic>)?.cast<int>(),
); );
} }
...@@ -402,6 +455,15 @@ class Key { ...@@ -402,6 +455,15 @@ class Key {
/// value. /// value.
List<int> glfwKeyCodes; List<int> glfwKeyCodes;
/// The list of names that GTK gives to this key (symbol names minus the
/// prefix).
List<String> gtkKeyNames;
/// The list of GTK key codes matching this key, created by looking up the
/// Linux name in the GTK data, and substituting the GTK key code
/// value.
List<int> gtkKeyCodes;
/// Creates a JSON map from the key data. /// Creates a JSON map from the key data.
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
return <String, dynamic>{ return <String, dynamic>{
...@@ -411,6 +473,7 @@ class Key { ...@@ -411,6 +473,7 @@ class Key {
'english': commentName, 'english': commentName,
'chromium': chromiumName, 'chromium': chromiumName,
'glfw': glfwKeyNames, 'glfw': glfwKeyNames,
'gtk': gtkKeyNames,
'windows': windowsKeyNames, 'windows': windowsKeyNames,
}, },
'scanCodes': <String, dynamic>{ 'scanCodes': <String, dynamic>{
...@@ -424,6 +487,7 @@ class Key { ...@@ -424,6 +487,7 @@ class Key {
'keyCodes': <String, List<int>>{ 'keyCodes': <String, List<int>>{
'android': androidKeyCodes, 'android': androidKeyCodes,
'glfw': glfwKeyCodes, 'glfw': glfwKeyCodes,
'gtk': gtkKeyCodes,
'windows': windowsKeyCodes, 'windows': windowsKeyCodes,
}, },
}; };
......
...@@ -1312,6 +1312,223 @@ const Map<int, LogicalKeyboardKey> kGlfwNumpadMap = <int, LogicalKeyboardKey>{ ...@@ -1312,6 +1312,223 @@ const Map<int, LogicalKeyboardKey> kGlfwNumpadMap = <int, LogicalKeyboardKey>{
336: LogicalKeyboardKey.numpadEqual, 336: LogicalKeyboardKey.numpadEqual,
}; };
/// Maps GTK-specific key codes to the matching [LogicalKeyboardKey].
const Map<int, LogicalKeyboardKey> kGtkToLogicalKey = <int, LogicalKeyboardKey>{
65517: LogicalKeyboardKey.hyper,
65518: LogicalKeyboardKey.hyper,
65515: LogicalKeyboardKey.superKey,
65516: LogicalKeyboardKey.superKey,
269025191: LogicalKeyboardKey.suspend,
269025071: LogicalKeyboardKey.sleep,
269025067: LogicalKeyboardKey.wakeUp,
65: LogicalKeyboardKey.keyA,
66: LogicalKeyboardKey.keyB,
67: LogicalKeyboardKey.keyC,
68: LogicalKeyboardKey.keyD,
69: LogicalKeyboardKey.keyE,
70: LogicalKeyboardKey.keyF,
71: LogicalKeyboardKey.keyG,
72: LogicalKeyboardKey.keyH,
73: LogicalKeyboardKey.keyI,
74: LogicalKeyboardKey.keyJ,
75: LogicalKeyboardKey.keyK,
76: LogicalKeyboardKey.keyL,
77: LogicalKeyboardKey.keyM,
78: LogicalKeyboardKey.keyN,
79: LogicalKeyboardKey.keyO,
80: LogicalKeyboardKey.keyP,
81: LogicalKeyboardKey.keyQ,
82: LogicalKeyboardKey.keyR,
83: LogicalKeyboardKey.keyS,
84: LogicalKeyboardKey.keyT,
85: LogicalKeyboardKey.keyU,
86: LogicalKeyboardKey.keyV,
87: LogicalKeyboardKey.keyW,
88: LogicalKeyboardKey.keyX,
89: LogicalKeyboardKey.keyY,
90: LogicalKeyboardKey.keyZ,
49: LogicalKeyboardKey.digit1,
50: LogicalKeyboardKey.digit2,
51: LogicalKeyboardKey.digit3,
52: LogicalKeyboardKey.digit4,
53: LogicalKeyboardKey.digit5,
54: LogicalKeyboardKey.digit6,
55: LogicalKeyboardKey.digit7,
56: LogicalKeyboardKey.digit8,
57: LogicalKeyboardKey.digit9,
48: LogicalKeyboardKey.digit0,
65293: LogicalKeyboardKey.enter,
65307: LogicalKeyboardKey.escape,
65288: LogicalKeyboardKey.backspace,
65289: LogicalKeyboardKey.tab,
65417: LogicalKeyboardKey.tab,
32: LogicalKeyboardKey.space,
65408: LogicalKeyboardKey.space,
45: LogicalKeyboardKey.minus,
61: LogicalKeyboardKey.equal,
91: LogicalKeyboardKey.bracketLeft,
93: LogicalKeyboardKey.bracketRight,
92: LogicalKeyboardKey.backslash,
59: LogicalKeyboardKey.semicolon,
39: LogicalKeyboardKey.quote,
96: LogicalKeyboardKey.backquote,
44: LogicalKeyboardKey.comma,
46: LogicalKeyboardKey.period,
47: LogicalKeyboardKey.slash,
65509: LogicalKeyboardKey.capsLock,
65470: LogicalKeyboardKey.f1,
65425: LogicalKeyboardKey.f1,
65471: LogicalKeyboardKey.f2,
65426: LogicalKeyboardKey.f2,
65472: LogicalKeyboardKey.f3,
65427: LogicalKeyboardKey.f3,
65473: LogicalKeyboardKey.f4,
65428: LogicalKeyboardKey.f4,
65474: LogicalKeyboardKey.f5,
65475: LogicalKeyboardKey.f6,
65476: LogicalKeyboardKey.f7,
65477: LogicalKeyboardKey.f8,
65478: LogicalKeyboardKey.f9,
65479: LogicalKeyboardKey.f10,
65480: LogicalKeyboardKey.f11,
65481: LogicalKeyboardKey.f12,
64797: LogicalKeyboardKey.printScreen,
65300: LogicalKeyboardKey.scrollLock,
65299: LogicalKeyboardKey.pause,
65379: LogicalKeyboardKey.insert,
65438: LogicalKeyboardKey.insert,
65360: LogicalKeyboardKey.home,
65429: LogicalKeyboardKey.home,
65365: LogicalKeyboardKey.pageUp,
65434: LogicalKeyboardKey.pageUp,
65535: LogicalKeyboardKey.delete,
65439: LogicalKeyboardKey.delete,
65367: LogicalKeyboardKey.end,
65436: LogicalKeyboardKey.end,
65366: LogicalKeyboardKey.pageDown,
65435: LogicalKeyboardKey.pageDown,
65363: LogicalKeyboardKey.arrowRight,
65432: LogicalKeyboardKey.arrowRight,
65361: LogicalKeyboardKey.arrowLeft,
65430: LogicalKeyboardKey.arrowLeft,
65364: LogicalKeyboardKey.arrowDown,
65433: LogicalKeyboardKey.arrowDown,
65362: LogicalKeyboardKey.arrowUp,
65431: LogicalKeyboardKey.arrowUp,
65407: LogicalKeyboardKey.numLock,
65455: LogicalKeyboardKey.numpadDivide,
65450: LogicalKeyboardKey.numpadMultiply,
65453: LogicalKeyboardKey.numpadSubtract,
65451: LogicalKeyboardKey.numpadAdd,
65421: LogicalKeyboardKey.numpadEnter,
65457: LogicalKeyboardKey.numpad1,
65458: LogicalKeyboardKey.numpad2,
65459: LogicalKeyboardKey.numpad3,
65460: LogicalKeyboardKey.numpad4,
65461: LogicalKeyboardKey.numpad5,
65462: LogicalKeyboardKey.numpad6,
65463: LogicalKeyboardKey.numpad7,
65464: LogicalKeyboardKey.numpad8,
65465: LogicalKeyboardKey.numpad9,
65456: LogicalKeyboardKey.numpad0,
65454: LogicalKeyboardKey.numpadDecimal,
65383: LogicalKeyboardKey.contextMenu,
269025066: LogicalKeyboardKey.power,
65469: LogicalKeyboardKey.numpadEqual,
65482: LogicalKeyboardKey.f13,
65483: LogicalKeyboardKey.f14,
65484: LogicalKeyboardKey.f15,
65485: LogicalKeyboardKey.f16,
65486: LogicalKeyboardKey.f17,
65487: LogicalKeyboardKey.f18,
65488: LogicalKeyboardKey.f19,
65489: LogicalKeyboardKey.f20,
65490: LogicalKeyboardKey.f21,
65491: LogicalKeyboardKey.f22,
65492: LogicalKeyboardKey.f23,
65493: LogicalKeyboardKey.f24,
269025131: LogicalKeyboardKey.open,
65386: LogicalKeyboardKey.help,
65376: LogicalKeyboardKey.select,
65381: LogicalKeyboardKey.undo,
269025111: LogicalKeyboardKey.copy,
64789: LogicalKeyboardKey.copy,
269025133: LogicalKeyboardKey.paste,
65384: LogicalKeyboardKey.find,
269025042: LogicalKeyboardKey.audioVolumeMute,
269025043: LogicalKeyboardKey.audioVolumeUp,
269025041: LogicalKeyboardKey.audioVolumeDown,
65406: LogicalKeyboardKey.kanaMode,
165: LogicalKeyboardKey.intlYen,
65507: LogicalKeyboardKey.controlLeft,
65505: LogicalKeyboardKey.shiftLeft,
65513: LogicalKeyboardKey.altLeft,
65511: LogicalKeyboardKey.metaLeft,
65508: LogicalKeyboardKey.controlRight,
65506: LogicalKeyboardKey.shiftRight,
65514: LogicalKeyboardKey.altRight,
65512: LogicalKeyboardKey.metaRight,
269025026: LogicalKeyboardKey.brightnessUp,
269025027: LogicalKeyboardKey.brightnessDown,
269025134: LogicalKeyboardKey.launchPhone,
269025044: LogicalKeyboardKey.mediaPlay,
64790: LogicalKeyboardKey.mediaPlay,
269025073: LogicalKeyboardKey.mediaPause,
269025052: LogicalKeyboardKey.mediaRecord,
269025175: LogicalKeyboardKey.mediaFastForward,
269025086: LogicalKeyboardKey.mediaRewind,
269025047: LogicalKeyboardKey.mediaTrackNext,
269025046: LogicalKeyboardKey.mediaTrackPrevious,
269025045: LogicalKeyboardKey.mediaStop,
269025068: LogicalKeyboardKey.eject,
269025049: LogicalKeyboardKey.launchMail,
269025056: LogicalKeyboardKey.launchCalendar,
269025070: LogicalKeyboardKey.launchInternetBrowser,
269025121: LogicalKeyboardKey.logOff,
269025148: LogicalKeyboardKey.spellCheck,
269025069: LogicalKeyboardKey.launchScreenSaver,
269025170: LogicalKeyboardKey.launchAudioBrowser,
269025128: LogicalKeyboardKey.newKey,
269025110: LogicalKeyboardKey.close,
269025143: LogicalKeyboardKey.save,
65377: LogicalKeyboardKey.print,
269025051: LogicalKeyboardKey.browserSearch,
269025048: LogicalKeyboardKey.browserHome,
269025062: LogicalKeyboardKey.browserBack,
269025063: LogicalKeyboardKey.browserForward,
269025064: LogicalKeyboardKey.browserStop,
269025065: LogicalKeyboardKey.browserRefresh,
269025072: LogicalKeyboardKey.browserFavorites,
269025163: LogicalKeyboardKey.zoomIn,
269025164: LogicalKeyboardKey.zoomOut,
65382: LogicalKeyboardKey.redo,
269025138: LogicalKeyboardKey.mailReply,
269025168: LogicalKeyboardKey.mailForward,
269025147: LogicalKeyboardKey.mailSend,
};
/// A map of GTK key codes which have printable representations, but appear
/// on the number pad. Used to provide different key objects for keys like
/// KEY_EQUALS and NUMPAD_EQUALS.
const Map<int, LogicalKeyboardKey> kGtkNumpadMap = <int, LogicalKeyboardKey>{
65455: LogicalKeyboardKey.numpadDivide,
65450: LogicalKeyboardKey.numpadMultiply,
65453: LogicalKeyboardKey.numpadSubtract,
65451: LogicalKeyboardKey.numpadAdd,
65457: LogicalKeyboardKey.numpad1,
65458: LogicalKeyboardKey.numpad2,
65459: LogicalKeyboardKey.numpad3,
65460: LogicalKeyboardKey.numpad4,
65461: LogicalKeyboardKey.numpad5,
65462: LogicalKeyboardKey.numpad6,
65463: LogicalKeyboardKey.numpad7,
65464: LogicalKeyboardKey.numpad8,
65465: LogicalKeyboardKey.numpad9,
65456: LogicalKeyboardKey.numpad0,
65454: LogicalKeyboardKey.numpadDecimal,
65469: LogicalKeyboardKey.numpadEqual,
};
/// Maps XKB specific key code values representing [PhysicalKeyboardKey]. /// Maps XKB specific key code values representing [PhysicalKeyboardKey].
const Map<int, PhysicalKeyboardKey> kLinuxToPhysicalKey = <int, PhysicalKeyboardKey>{ const Map<int, PhysicalKeyboardKey> kLinuxToPhysicalKey = <int, PhysicalKeyboardKey>{
0x00000281: PhysicalKeyboardKey.privacyScreenToggle, 0x00000281: PhysicalKeyboardKey.privacyScreenToggle,
......
...@@ -19,7 +19,7 @@ import 'raw_keyboard.dart'; ...@@ -19,7 +19,7 @@ import 'raw_keyboard.dart';
/// ///
/// * [RawKeyboard], which uses this interface to expose key data. /// * [RawKeyboard], which uses this interface to expose key data.
class RawKeyEventDataLinux extends RawKeyEventData { class RawKeyEventDataLinux extends RawKeyEventData {
/// Creates a key event data structure specific for macOS. /// Creates a key event data structure specific for Linux.
/// ///
/// The [toolkit], [scanCode], [unicodeScalarValues], [keyCode], and [modifiers], /// The [toolkit], [scanCode], [unicodeScalarValues], [keyCode], and [modifiers],
/// arguments must not be null. /// arguments must not be null.
...@@ -145,6 +145,8 @@ abstract class KeyHelper { ...@@ -145,6 +145,8 @@ abstract class KeyHelper {
factory KeyHelper(String toolkit) { factory KeyHelper(String toolkit) {
if (toolkit == 'glfw') { if (toolkit == 'glfw') {
return GLFWKeyHelper(); return GLFWKeyHelper();
} else if (toolkit == 'gtk') {
return GtkKeyHelper();
} else { } else {
throw FlutterError('Window toolkit not recognized: $toolkit'); throw FlutterError('Window toolkit not recognized: $toolkit');
} }
...@@ -314,3 +316,149 @@ class GLFWKeyHelper with KeyHelper { ...@@ -314,3 +316,149 @@ class GLFWKeyHelper with KeyHelper {
return kGlfwToLogicalKey[keyCode]; return kGlfwToLogicalKey[keyCode];
} }
} }
/// Helper class that uses GTK-specific key mappings.
class GtkKeyHelper with KeyHelper {
/// This mask is used to check the [modifiers] field to test whether one of the
/// SHIFT modifier keys is pressed.
///
/// {@template flutter.services.gtkKeyHelper.modifiers}
/// Use this value if you need to decode the [modifiers] field yourself, but
/// it's much easier to use [isModifierPressed] if you just want to know if a
/// modifier is pressed. This is especially true on GTK, since its modifiers
/// don't include the effects of the current key event.
/// {@endtemplate}
static const int modifierShift = 1 << 0;
/// This mask is used to check the [modifiers] field to test whether the CAPS
/// LOCK modifier key is on.
/// {@macro flutter.services.gtkKeyHelper.modifiers}
static const int modifierCapsLock = 1 << 1;
/// This mask is used to check the [modifiers] field to test whether one of the
/// CTRL modifier keys is pressed.
/// {@macro flutter.services.gtkKeyHelper.modifiers}
static const int modifierControl = 1 << 2;
/// This mask is used to check the [modifiers] field to test whether the first
/// modifier key is pressed (usually mapped to alt).
/// {@macro flutter.services.gtkKeyHelper.modifiers}
static const int modifierMod1 = 1 << 3;
/// This mask is used to check the [modifiers] field to test whether the second
/// modifier key is pressed (assumed to be mapped to num lock).
/// {@macro flutter.services.gtkKeyHelper.modifiers}
static const int modifierMod2 = 1 << 4;
/// This mask is used to check the [modifiers] field to test whether one of the
/// Meta(SUPER) modifier keys is pressed.
/// {@macro flutter.services.gtkKeyHelper.modifiers}
static const int modifierMeta = 1 << 28;
int _mergeModifiers({int modifiers, int keyCode, bool isDown}) {
// GTK Key codes for modifier keys.
const int shiftLeftKeyCode = 0xffe1;
const int shiftRightKeyCode = 0xffe2;
const int controlLeftKeyCode = 0xffe3;
const int controlRightKeyCode = 0xffe4;
const int capsLockKeyCode = 0xffe5;
const int shiftLockKeyCode = 0xffe6;
const int metaLeftKeyCode = 0xffe7;
const int metaRightKeyCode = 0xffe8;
const int altLeftKeyCode = 0xffe9;
const int altRightKeyCode = 0xffea;
const int numLockKeyCode = 0xff7f;
// On GTK, the "modifiers" bitfield is the state as it is BEFORE this event
// happened, not AFTER, like every other platform. Consequently, if this is
// a key down, then we need to add the correct modifier bits, and if it's a
// key up, we need to remove them.
int modifierChange = 0;
switch (keyCode) {
case shiftLeftKeyCode:
case shiftRightKeyCode:
modifierChange = modifierShift;
break;
case controlLeftKeyCode:
case controlRightKeyCode:
modifierChange = modifierControl;
break;
case altLeftKeyCode:
case altRightKeyCode:
modifierChange = modifierMod1;
break;
case metaLeftKeyCode:
case metaRightKeyCode:
modifierChange = modifierMeta;
break;
case capsLockKeyCode:
case shiftLockKeyCode:
modifierChange = modifierCapsLock;
break;
case numLockKeyCode:
modifierChange = modifierMod2;
break;
default:
break;
}
return isDown ? modifiers | modifierChange : modifiers & ~modifierChange;
}
@override
bool isModifierPressed(ModifierKey key, int modifiers, {KeyboardSide side = KeyboardSide.any, int keyCode, bool isDown}) {
modifiers = _mergeModifiers(modifiers: modifiers, keyCode: keyCode, isDown: isDown);
switch (key) {
case ModifierKey.controlModifier:
return modifiers & modifierControl != 0;
case ModifierKey.shiftModifier:
return modifiers & modifierShift != 0;
case ModifierKey.altModifier:
return modifiers & modifierMod1 != 0;
case ModifierKey.metaModifier:
return modifiers & modifierMeta != 0;
case ModifierKey.capsLockModifier:
return modifiers & modifierCapsLock != 0;
case ModifierKey.numLockModifier:
return modifiers & modifierMod2 != 0;
case ModifierKey.functionModifier:
case ModifierKey.symbolModifier:
case ModifierKey.scrollLockModifier:
// These are not used in GTK keyboards.
return false;
}
return false;
}
@override
KeyboardSide getModifierSide(ModifierKey key) {
switch (key) {
case ModifierKey.controlModifier:
case ModifierKey.shiftModifier:
case ModifierKey.altModifier:
case ModifierKey.metaModifier:
// Neither GTK or X11 provide a distinction between left and right modifiers, so defaults to KeyboardSide.any.
// https://code.woboq.org/qt5/include/X11/X.h.html#_M/ShiftMask
return KeyboardSide.any;
case ModifierKey.capsLockModifier:
case ModifierKey.numLockModifier:
case ModifierKey.functionModifier:
case ModifierKey.symbolModifier:
case ModifierKey.scrollLockModifier:
return KeyboardSide.all;
}
assert(false, 'Not handling $key type properly.');
return null;
}
@override
LogicalKeyboardKey numpadKey(int keyCode) {
return kGtkNumpadMap[keyCode];
}
@override
LogicalKeyboardKey logicalKey(int keyCode) {
return kGtkToLogicalKey[keyCode];
}
}
...@@ -1101,6 +1101,189 @@ void main() { ...@@ -1101,6 +1101,189 @@ void main() {
}); });
}, skip: isBrowser); }, skip: isBrowser);
group('RawKeyEventDataLinux-GTK', () {
const Map<int, _ModifierCheck> modifierTests = <int, _ModifierCheck>{
GtkKeyHelper.modifierMod1: _ModifierCheck(ModifierKey.altModifier, KeyboardSide.any),
GtkKeyHelper.modifierShift: _ModifierCheck(ModifierKey.shiftModifier, KeyboardSide.any),
GtkKeyHelper.modifierControl: _ModifierCheck(ModifierKey.controlModifier, KeyboardSide.any),
GtkKeyHelper.modifierMeta: _ModifierCheck(ModifierKey.metaModifier, KeyboardSide.any),
GtkKeyHelper.modifierMod2: _ModifierCheck(ModifierKey.numLockModifier, KeyboardSide.all),
GtkKeyHelper.modifierCapsLock: _ModifierCheck(ModifierKey.capsLockModifier, KeyboardSide.all),
};
// How modifiers are interpreted depends upon the keyCode for GTK.
int keyCodeForModifier(int modifier, {bool isLeft}) {
switch (modifier) {
case GtkKeyHelper.modifierMod1:
return isLeft ? 65513 : 65513;
case GtkKeyHelper.modifierShift:
return isLeft ? 65505 : 65506;
case GtkKeyHelper.modifierControl:
return isLeft ? 65507 : 65508;
case GtkKeyHelper.modifierMeta:
return isLeft ? 65511 : 65512;
case GtkKeyHelper.modifierMod2:
return 65407;
case GtkKeyHelper.modifierCapsLock:
return 65509;
default:
return 65; // keyA
}
}
test('modifier keys are recognized individually', () {
for (final int modifier in modifierTests.keys) {
for (final bool isDown in <bool>[true, false]) {
for (final bool isLeft in <bool>[true, false]) {
final RawKeyEvent event = RawKeyEvent.fromMessage(<String, dynamic>{
'type': isDown ? 'keydown' : 'keyup',
'keymap': 'linux',
'toolkit': 'gtk',
'keyCode': keyCodeForModifier(modifier, isLeft: isLeft),
'scanCode': 0x00000026,
'unicodeScalarValues': 97,
// GTK modifiers don't include the current key event.
'modifiers': isDown ? 0 : modifier,
});
final RawKeyEventDataLinux data = event.data as RawKeyEventDataLinux;
for (final ModifierKey key in ModifierKey.values) {
if (modifierTests[modifier].key == key) {
expect(
data.isModifierPressed(key, side: modifierTests[modifier].side),
isDown ? isTrue : isFalse,
reason: "${isLeft ? 'left' : 'right'} $key ${isDown ? 'should' : 'should not'} be pressed with metaState $modifier, when key is ${isDown ? 'down' : 'up'}, but isn't.",
);
expect(data.getModifierSide(key), equals(modifierTests[modifier].side));
} else {
expect(
data.isModifierPressed(key, side: modifierTests[modifier].side),
isFalse,
reason: "${isLeft ? 'left' : 'right'} $key should not be pressed with metaState $modifier, wwhen key is ${isDown ? 'down' : 'up'}, but is.",
);
}
}
}
}
}
});
test('modifier keys are recognized when combined', () {
for (final int modifier in modifierTests.keys) {
if (modifier == GtkKeyHelper.modifierControl) {
// No need to combine CTRL key with itself.
continue;
}
final RawKeyEvent event = RawKeyEvent.fromMessage(<String, dynamic>{
'type': 'keydown',
'keymap': 'linux',
'toolkit': 'gtk',
'keyCode': 65,
'scanCode': 0x00000026,
'unicodeScalarValues': 97,
'modifiers': modifier | GtkKeyHelper.modifierControl,
});
final RawKeyEventDataLinux data = event.data as RawKeyEventDataLinux;
for (final ModifierKey key in ModifierKey.values) {
if (modifierTests[modifier].key == key || key == ModifierKey.controlModifier) {
expect(
data.isModifierPressed(key, side: modifierTests[modifier].side),
isTrue,
reason: '$key should be pressed with metaState $modifier '
"and additional key ${GtkKeyHelper.modifierControl}, but isn't.",
);
if (key != ModifierKey.controlModifier) {
expect(data.getModifierSide(key), equals(modifierTests[modifier].side));
} else {
expect(data.getModifierSide(key), equals(KeyboardSide.any));
}
} else {
expect(
data.isModifierPressed(key, side: modifierTests[modifier].side),
isFalse,
reason: '$key should not be pressed with metaState $modifier '
'and additional key ${GtkKeyHelper.modifierControl}.',
);
}
}
}
});
test('Printable keyboard keys are correctly translated', () {
final RawKeyEvent keyAEvent = RawKeyEvent.fromMessage(const <String, dynamic>{
'type': 'keydown',
'keymap': 'linux',
'toolkit': 'gtk',
'keyCode': 65,
'scanCode': 0x00000026,
'unicodeScalarValues': 113,
'modifiers': 0x0,
});
final RawKeyEventDataLinux data = keyAEvent.data as RawKeyEventDataLinux;
expect(data.physicalKey, equals(PhysicalKeyboardKey.keyA));
expect(data.logicalKey, equals(LogicalKeyboardKey.keyQ));
expect(data.keyLabel, equals('q'));
});
test('Code points with two Unicode scalar values are allowed', () {
final RawKeyEvent keyAEvent = RawKeyEvent.fromMessage(const <String, dynamic>{
'type': 'keydown',
'keymap': 'linux',
'toolkit': 'gtk',
'keyCode': 65,
'scanCode': 0x00000026,
'unicodeScalarValues': 0x10FFFF,
'modifiers': 0x0,
});
final RawKeyEventDataLinux data = keyAEvent.data as RawKeyEventDataLinux;
expect(data.physicalKey, equals(PhysicalKeyboardKey.keyA));
expect(data.logicalKey.keyId, equals(0x10FFFF));
expect(data.keyLabel, equals('􏿿'));
});
test('Code points with more than three Unicode scalar values are not allowed', () {
// |keyCode| and |scanCode| are arbitrary values. This test should fail due to an invalid |unicodeScalarValues|.
void _createFailingKey() {
RawKeyEvent.fromMessage(const <String, dynamic>{
'type': 'keydown',
'keymap': 'linux',
'toolkit': 'gtk',
'keyCode': 65,
'scanCode': 0x00000026,
'unicodeScalarValues': 0x1F00000000,
'modifiers': 0x0,
});
}
expect(() => _createFailingKey(), throwsAssertionError);
});
test('Control keyboard keys are correctly translated', () {
final RawKeyEvent escapeKeyEvent = RawKeyEvent.fromMessage(const <String, dynamic>{
'type': 'keydown',
'keymap': 'linux',
'toolkit': 'gtk',
'keyCode': 65307,
'scanCode': 0x00000009,
'unicodeScalarValues': 0,
'modifiers': 0x0,
});
final RawKeyEventDataLinux data = escapeKeyEvent.data as RawKeyEventDataLinux;
expect(data.physicalKey, equals(PhysicalKeyboardKey.escape));
expect(data.logicalKey, equals(LogicalKeyboardKey.escape));
expect(data.keyLabel, isNull);
});
test('Modifier keyboard keys are correctly translated', () {
final RawKeyEvent shiftLeftKeyEvent = RawKeyEvent.fromMessage(const <String, dynamic>{
'type': 'keydown',
'keymap': 'linux',
'toolkit': 'gtk',
'keyCode': 65505,
'scanCode': 0x00000032,
'unicodeScalarValues': 0,
});
final RawKeyEventDataLinux data = shiftLeftKeyEvent.data as RawKeyEventDataLinux;
expect(data.physicalKey, equals(PhysicalKeyboardKey.shiftLeft));
expect(data.logicalKey, equals(LogicalKeyboardKey.shiftLeft));
expect(data.keyLabel, isNull);
});
}, skip: isBrowser);
group('RawKeyEventDataWeb', () { group('RawKeyEventDataWeb', () {
const Map<int, ModifierKey> modifierTests = <int, ModifierKey>{ const Map<int, ModifierKey> modifierTests = <int, ModifierKey>{
RawKeyEventDataWeb.modifierAlt: ModifierKey.altModifier, RawKeyEventDataWeb.modifierAlt: ModifierKey.altModifier,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment