@@ -101,6 +101,55 @@ convert_keycode(SDL_Keycode from, enum android_keycode *to, uint16_t mod,
101
101
{SDLK_SPACE , AKEYCODE_SPACE },
102
102
};
103
103
104
+ // Numbers and punctuation keys.
105
+ // Used in raw mode only.
106
+ static const struct sc_intmap_entry numbers_punct_keys [] = {
107
+ {SDLK_HASH , AKEYCODE_POUND },
108
+ {SDLK_PERCENT , AKEYCODE_PERIOD },
109
+ {SDLK_QUOTE , AKEYCODE_APOSTROPHE },
110
+ {SDLK_ASTERISK , AKEYCODE_STAR },
111
+ {SDLK_PLUS , AKEYCODE_PLUS },
112
+ {SDLK_COMMA , AKEYCODE_COMMA },
113
+ {SDLK_MINUS , AKEYCODE_MINUS },
114
+ {SDLK_PERIOD , AKEYCODE_PERIOD },
115
+ {SDLK_SLASH , AKEYCODE_SLASH },
116
+ {SDLK_0 , AKEYCODE_0 },
117
+ {SDLK_1 , AKEYCODE_1 },
118
+ {SDLK_2 , AKEYCODE_2 },
119
+ {SDLK_3 , AKEYCODE_3 },
120
+ {SDLK_4 , AKEYCODE_4 },
121
+ {SDLK_5 , AKEYCODE_5 },
122
+ {SDLK_6 , AKEYCODE_6 },
123
+ {SDLK_7 , AKEYCODE_7 },
124
+ {SDLK_8 , AKEYCODE_8 },
125
+ {SDLK_9 , AKEYCODE_9 },
126
+ {SDLK_SEMICOLON , AKEYCODE_SEMICOLON },
127
+ {SDLK_EQUALS , AKEYCODE_EQUALS },
128
+ {SDLK_AT , AKEYCODE_AT },
129
+ {SDLK_LEFTBRACKET , AKEYCODE_LEFT_BRACKET },
130
+ {SDLK_BACKSLASH , AKEYCODE_BACKSLASH },
131
+ {SDLK_RIGHTBRACKET , AKEYCODE_RIGHT_BRACKET },
132
+ {SDLK_BACKQUOTE , AKEYCODE_GRAVE },
133
+ {SDLK_KP_1 , AKEYCODE_NUMPAD_1 },
134
+ {SDLK_KP_2 , AKEYCODE_NUMPAD_2 },
135
+ {SDLK_KP_3 , AKEYCODE_NUMPAD_3 },
136
+ {SDLK_KP_4 , AKEYCODE_NUMPAD_4 },
137
+ {SDLK_KP_5 , AKEYCODE_NUMPAD_5 },
138
+ {SDLK_KP_6 , AKEYCODE_NUMPAD_6 },
139
+ {SDLK_KP_7 , AKEYCODE_NUMPAD_7 },
140
+ {SDLK_KP_8 , AKEYCODE_NUMPAD_8 },
141
+ {SDLK_KP_9 , AKEYCODE_NUMPAD_9 },
142
+ {SDLK_KP_0 , AKEYCODE_NUMPAD_0 },
143
+ {SDLK_KP_DIVIDE , AKEYCODE_NUMPAD_DIVIDE },
144
+ {SDLK_KP_MULTIPLY , AKEYCODE_NUMPAD_MULTIPLY },
145
+ {SDLK_KP_MINUS , AKEYCODE_NUMPAD_SUBTRACT },
146
+ {SDLK_KP_PLUS , AKEYCODE_NUMPAD_ADD },
147
+ {SDLK_KP_PERIOD , AKEYCODE_NUMPAD_DOT },
148
+ {SDLK_KP_EQUALS , AKEYCODE_NUMPAD_EQUALS },
149
+ {SDLK_KP_LEFTPAREN , AKEYCODE_NUMPAD_LEFT_PAREN },
150
+ {SDLK_KP_RIGHTPAREN , AKEYCODE_NUMPAD_RIGHT_PAREN },
151
+ };
152
+
104
153
const struct sc_intmap_entry * entry =
105
154
SC_INTMAP_FIND_ENTRY (special_keys , from );
106
155
if (entry ) {
@@ -134,6 +183,14 @@ convert_keycode(SDL_Keycode from, enum android_keycode *to, uint16_t mod,
134
183
return true;
135
184
}
136
185
186
+ if (key_inject_mode == SC_KEY_INJECT_MODE_RAW ) {
187
+ entry = SC_INTMAP_FIND_ENTRY (numbers_punct_keys , from );
188
+ if (entry ) {
189
+ * to = entry -> value ;
190
+ return true;
191
+ }
192
+ }
193
+
137
194
return false;
138
195
}
139
196
@@ -251,6 +308,11 @@ sc_key_processor_process_text(struct sc_key_processor *kp,
251
308
const SDL_TextInputEvent * event ) {
252
309
struct sc_keyboard_inject * ki = DOWNCAST (kp );
253
310
311
+ if (ki -> key_inject_mode == SC_KEY_INJECT_MODE_RAW ) {
312
+ // Never inject text events
313
+ return ;
314
+ }
315
+
254
316
if (ki -> key_inject_mode == SC_KEY_INJECT_MODE_MIXED ) {
255
317
char c = event -> text [0 ];
256
318
if (isalpha (c ) || c == ' ' ) {
0 commit comments