@@ -80,14 +80,53 @@ static bool RightAltPressed(int mask)
80
80
{kVK_ANSI_Keypad6 , MP_KEY_KP6}, {kVK_ANSI_Keypad7 , MP_KEY_KP7},
81
81
{kVK_ANSI_Keypad8 , MP_KEY_KP8}, {kVK_ANSI_Keypad9 , MP_KEY_KP9},
82
82
83
- {0 , 0 }
83
+ {- 1 , 0 }
84
84
};
85
85
86
- static int convert_key (unsigned key, unsigned charcode)
86
+ static const struct mp_keymap keymap_english_us[] = {
87
+ {kVK_ANSI_Grave , ' `' }, {kVK_ANSI_1 , ' 1' }, {kVK_ANSI_2 , ' 2' }, {kVK_ANSI_3 , ' 3' },
88
+ {kVK_ANSI_4 , ' 4' }, {kVK_ANSI_5 , ' 5' }, {kVK_ANSI_6 , ' 6' }, {kVK_ANSI_7 , ' 7' },
89
+ {kVK_ANSI_8 , ' 8' }, {kVK_ANSI_9 , ' 9' }, {kVK_ANSI_0 , ' 0' }, {kVK_ANSI_Minus , ' -' },
90
+ {kVK_ANSI_Equal , ' =' }, {kVK_ANSI_Q , ' q' }, {kVK_ANSI_W , ' w' }, {kVK_ANSI_E , ' e' },
91
+ {kVK_ANSI_R , ' r' }, {kVK_ANSI_T , ' t' }, {kVK_ANSI_Y , ' y' }, {kVK_ANSI_U , ' u' },
92
+ {kVK_ANSI_I , ' i' }, {kVK_ANSI_O , ' o' }, {kVK_ANSI_P , ' p' }, {kVK_ANSI_LeftBracket , ' [' },
93
+ {kVK_ANSI_RightBracket , ' ]' }, {kVK_ANSI_Backslash , ' \\ ' }, {kVK_ANSI_A , ' a' },
94
+ {kVK_ANSI_S , ' s' }, {kVK_ANSI_D , ' d' }, {kVK_ANSI_F , ' f' }, {kVK_ANSI_G , ' g' },
95
+ {kVK_ANSI_H , ' h' }, {kVK_ANSI_J , ' j' }, {kVK_ANSI_K , ' k' }, {kVK_ANSI_L , ' l' },
96
+ {kVK_ANSI_Semicolon , ' ;' }, {kVK_ANSI_Quote , ' \' ' }, {kVK_ANSI_Z , ' z' }, {kVK_ANSI_X , ' x' },
97
+ {kVK_ANSI_C , ' c' }, {kVK_ANSI_V , ' v' }, {kVK_ANSI_B , ' b' }, {kVK_ANSI_N , ' n' },
98
+ {kVK_ANSI_M , ' m' }, {kVK_ANSI_Comma , ' ,' }, {kVK_ANSI_Period , ' .' }, {kVK_ANSI_Slash , ' /' },
99
+
100
+ {-1 , 0 }
101
+ };
102
+
103
+ static const struct mp_keymap keymap_english_us_shift[] = {
104
+ {kVK_ANSI_Grave , ' ~' }, {kVK_ANSI_1 , ' !' }, {kVK_ANSI_2 , ' @' }, {kVK_ANSI_3 , ' #' },
105
+ {kVK_ANSI_4 , ' $' }, {kVK_ANSI_5 , ' %' }, {kVK_ANSI_6 , ' ^' }, {kVK_ANSI_7 , ' &' },
106
+ {kVK_ANSI_8 , ' *' }, {kVK_ANSI_9 , ' (' }, {kVK_ANSI_0 , ' )' }, {kVK_ANSI_Minus , ' _' },
107
+ {kVK_ANSI_Equal , ' +' }, {kVK_ANSI_Q , ' Q' }, {kVK_ANSI_W , ' W' }, {kVK_ANSI_E , ' E' },
108
+ {kVK_ANSI_R , ' R' }, {kVK_ANSI_T , ' T' }, {kVK_ANSI_Y , ' Y' }, {kVK_ANSI_U , ' U' },
109
+ {kVK_ANSI_I , ' I' }, {kVK_ANSI_O , ' O' }, {kVK_ANSI_P , ' P' }, {kVK_ANSI_LeftBracket , ' {' },
110
+ {kVK_ANSI_RightBracket , ' }' }, {kVK_ANSI_Backslash , ' |' }, {kVK_ANSI_A , ' A' },
111
+ {kVK_ANSI_S , ' S' }, {kVK_ANSI_D , ' D' }, {kVK_ANSI_F , ' F' }, {kVK_ANSI_G , ' G' },
112
+ {kVK_ANSI_H , ' H' }, {kVK_ANSI_J , ' J' }, {kVK_ANSI_K , ' K' }, {kVK_ANSI_L , ' L' },
113
+ {kVK_ANSI_Semicolon , ' :' }, {kVK_ANSI_Quote , ' \" ' }, {kVK_ANSI_Z , ' Z' }, {kVK_ANSI_X , ' X' },
114
+ {kVK_ANSI_C , ' C' }, {kVK_ANSI_V , ' V' }, {kVK_ANSI_B , ' B' }, {kVK_ANSI_N , ' N' },
115
+ {kVK_ANSI_M , ' M' }, {kVK_ANSI_Comma , ' <' }, {kVK_ANSI_Period , ' >' }, {kVK_ANSI_Slash , ' ?' },
116
+
117
+ {-1 , 0 }
118
+ };
119
+
120
+ static int convert_key (unsigned key, unsigned charcode, bool layout_independent, bool shift)
87
121
{
88
122
int mpkey = lookup_keymap_table (keymap, key);
89
123
if (mpkey)
90
124
return mpkey;
125
+ if (layout_independent) {
126
+ mpkey = lookup_keymap_table (shift ? keymap_english_us_shift : keymap_english_us, key);
127
+ if (mpkey)
128
+ return mpkey;
129
+ }
91
130
return charcode;
92
131
}
93
132
@@ -338,7 +377,12 @@ - (NSEvent*)handleKey:(NSEvent *)event
338
377
else
339
378
chars = [event charactersIgnoringModifiers ];
340
379
341
- int key = convert_key ([event keyCode ], *[chars UTF8String ]);
380
+ bool layout_independent = false ;
381
+ if (mpv_shared_app ().options )
382
+ layout_independent = mpv_shared_app ().options ->vo .keyboard_layout_independent ;
383
+
384
+ int key = convert_key ([event keyCode ], *[chars UTF8String ], layout_independent,
385
+ [event modifierFlags ] & NSShiftKeyMask );
342
386
343
387
if (key > -1 ) {
344
388
if ([self isAppKeyEquivalent: chars withEvent: event])
0 commit comments