Skip to content

Commit 26e2b8d

Browse files
committed
Added hybrid_key_events mode ctrl + L
1 parent ed3997a commit 26e2b8d

File tree

4 files changed

+43
-25
lines changed

4 files changed

+43
-25
lines changed

app/src/convert.c

+23-23
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,13 @@ static enum android_metastate convert_meta_state(SDL_Keymod mod) {
7474
static SDL_bool convert_text_keycode(SDL_Keycode from, enum android_keycode *to) {
7575
switch (from) {
7676
MAP(SDLK_SPACE, AKEYCODE_SPACE);
77-
MAP(SDLK_HASH, AKEYCODE_POUND);
78-
MAP(SDLK_QUOTE, AKEYCODE_APOSTROPHE);
79-
MAP(SDLK_ASTERISK, AKEYCODE_STAR);
80-
MAP(SDLK_COMMA, AKEYCODE_COMMA);
81-
MAP(SDLK_MINUS, AKEYCODE_MINUS);
82-
MAP(SDLK_PERIOD, AKEYCODE_PERIOD);
83-
MAP(SDLK_SLASH, AKEYCODE_SLASH);
77+
//MAP(SDLK_HASH, AKEYCODE_POUND);
78+
//MAP(SDLK_QUOTE, AKEYCODE_APOSTROPHE);
79+
//MAP(SDLK_ASTERISK, AKEYCODE_STAR);
80+
//MAP(SDLK_COMMA, AKEYCODE_COMMA);
81+
//MAP(SDLK_MINUS, AKEYCODE_MINUS);
82+
//MAP(SDLK_PERIOD, AKEYCODE_PERIOD);
83+
//MAP(SDLK_SLASH, AKEYCODE_SLASH);
8484
MAP(SDLK_0, AKEYCODE_0);
8585
MAP(SDLK_1, AKEYCODE_1);
8686
MAP(SDLK_2, AKEYCODE_2);
@@ -91,13 +91,13 @@ static SDL_bool convert_text_keycode(SDL_Keycode from, enum android_keycode *to)
9191
MAP(SDLK_7, AKEYCODE_7);
9292
MAP(SDLK_8, AKEYCODE_8);
9393
MAP(SDLK_9, AKEYCODE_9);
94-
MAP(SDLK_SEMICOLON, AKEYCODE_SEMICOLON);
95-
MAP(SDLK_EQUALS, AKEYCODE_EQUALS);
96-
MAP(SDLK_AT, AKEYCODE_AT);
97-
MAP(SDLK_LEFTBRACKET, AKEYCODE_LEFT_BRACKET);
98-
MAP(SDLK_BACKSLASH, AKEYCODE_BACKSLASH);
99-
MAP(SDLK_RIGHTBRACKET, AKEYCODE_RIGHT_BRACKET);
100-
MAP(SDLK_BACKQUOTE, AKEYCODE_GRAVE);
94+
//MAP(SDLK_SEMICOLON, AKEYCODE_SEMICOLON);
95+
//MAP(SDLK_EQUALS, AKEYCODE_EQUALS);
96+
//MAP(SDLK_AT, AKEYCODE_AT);
97+
//MAP(SDLK_LEFTBRACKET, AKEYCODE_LEFT_BRACKET);
98+
//MAP(SDLK_BACKSLASH, AKEYCODE_BACKSLASH);
99+
//MAP(SDLK_RIGHTBRACKET, AKEYCODE_RIGHT_BRACKET);
100+
//MAP(SDLK_BACKQUOTE, AKEYCODE_GRAVE);
101101
MAP(SDLK_a, AKEYCODE_A);
102102
MAP(SDLK_b, AKEYCODE_B);
103103
MAP(SDLK_c, AKEYCODE_C);
@@ -124,7 +124,7 @@ static SDL_bool convert_text_keycode(SDL_Keycode from, enum android_keycode *to)
124124
MAP(SDLK_x, AKEYCODE_X);
125125
MAP(SDLK_y, AKEYCODE_Y);
126126
MAP(SDLK_z, AKEYCODE_Z);
127-
MAP(SDLK_KP_ENTER, AKEYCODE_NUMPAD_ENTER);
127+
//MAP(SDLK_KP_ENTER, AKEYCODE_NUMPAD_ENTER);
128128
MAP(SDLK_KP_1, AKEYCODE_NUMPAD_1);
129129
MAP(SDLK_KP_2, AKEYCODE_NUMPAD_2);
130130
MAP(SDLK_KP_3, AKEYCODE_NUMPAD_3);
@@ -135,14 +135,14 @@ static SDL_bool convert_text_keycode(SDL_Keycode from, enum android_keycode *to)
135135
MAP(SDLK_KP_8, AKEYCODE_NUMPAD_8);
136136
MAP(SDLK_KP_9, AKEYCODE_NUMPAD_9);
137137
MAP(SDLK_KP_0, AKEYCODE_NUMPAD_0);
138-
MAP(SDLK_KP_DIVIDE, AKEYCODE_NUMPAD_DIVIDE);
139-
MAP(SDLK_KP_MULTIPLY, AKEYCODE_NUMPAD_MULTIPLY);
140-
MAP(SDLK_KP_MINUS, AKEYCODE_NUMPAD_SUBTRACT);
141-
MAP(SDLK_KP_PLUS, AKEYCODE_NUMPAD_ADD);
142-
MAP(SDLK_KP_PERIOD, AKEYCODE_NUMPAD_DOT);
143-
MAP(SDLK_KP_EQUALS, AKEYCODE_NUMPAD_EQUALS);
144-
MAP(SDLK_KP_LEFTPAREN, AKEYCODE_NUMPAD_LEFT_PAREN);
145-
MAP(SDLK_KP_RIGHTPAREN, AKEYCODE_NUMPAD_RIGHT_PAREN);
138+
//MAP(SDLK_KP_DIVIDE, AKEYCODE_NUMPAD_DIVIDE);
139+
//MAP(SDLK_KP_MULTIPLY, AKEYCODE_NUMPAD_MULTIPLY);
140+
//MAP(SDLK_KP_MINUS, AKEYCODE_NUMPAD_SUBTRACT);
141+
//MAP(SDLK_KP_PLUS, AKEYCODE_NUMPAD_ADD);
142+
//MAP(SDLK_KP_PERIOD, AKEYCODE_NUMPAD_DOT);
143+
//MAP(SDLK_KP_EQUALS, AKEYCODE_NUMPAD_EQUALS);
144+
//MAP(SDLK_KP_LEFTPAREN, AKEYCODE_NUMPAD_LEFT_PAREN);
145+
//MAP(SDLK_KP_RIGHTPAREN, AKEYCODE_NUMPAD_RIGHT_PAREN);
146146
FAIL;
147147
}
148148
}

app/src/input_manager.c

+18-2
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,13 @@ void input_manager_process_text_input(struct input_manager *input_manager,
133133
// we will forward the raw key events instead
134134
return;
135135
}
136+
// || SDL_strdup(event->text) == "\r"
137+
char special_chars[] = " 0123456789abcdefghijklmnopqrstuvwxyz";
138+
if (input_manager->hybrid_key_events && strpbrk(special_chars, SDL_strdup(event->text)) != NULL) {
139+
// we will forward the raw key events instead
140+
return;
141+
}
142+
136143
struct control_event control_event;
137144
control_event.type = CONTROL_EVENT_TYPE_TEXT;
138145
control_event.text_event.text = SDL_strdup(event->text);
@@ -222,18 +229,27 @@ void input_manager_process_key(struct input_manager *input_manager,
222229
return;
223230
case SDLK_k:
224231
if (!repeat && event->type == SDL_KEYDOWN) {
232+
input_manager->hybrid_key_events = SDL_FALSE;
225233
input_manager->raw_key_events ^= SDL_TRUE; // toggle
226234
LOGI("Raw key events mode %s",
227235
input_manager->raw_key_events ? "enabled" : "disabled");
228236
}
229237
return;
238+
case SDLK_l:
239+
if (!repeat && event->type == SDL_KEYDOWN) {
240+
input_manager->raw_key_events = SDL_FALSE;
241+
input_manager->hybrid_key_events ^= SDL_TRUE; // toggle
242+
LOGI("Hybrid key events mode %s",
243+
input_manager->hybrid_key_events ? "enabled" : "disabled");
244+
}
245+
return;
230246
}
231247

232248
return;
233249
}
234250

235251
struct control_event control_event;
236-
SDL_bool raw_key_events = input_manager->raw_key_events;
252+
SDL_bool raw_key_events = input_manager->raw_key_events | input_manager->hybrid_key_events;
237253
if (input_key_from_sdl_to_android(event, &control_event, raw_key_events)) {
238254
if (!controller_push_event(input_manager->controller, &control_event)) {
239255
LOGW("Cannot send control event");
@@ -298,4 +314,4 @@ void input_manager_process_mouse_wheel(struct input_manager *input_manager,
298314
LOGW("Cannot send mouse wheel event");
299315
}
300316
}
301-
}
317+
}

app/src/input_manager.h

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ struct input_manager {
1212
struct frames *frames;
1313
struct screen *screen;
1414
SDL_bool raw_key_events;
15+
SDL_bool hybrid_key_events;
1516
};
1617

1718
void input_manager_process_text_input(struct input_manager *input_manager,

app/src/scrcpy.c

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ static struct input_manager input_manager = {
3636
.frames = &frames,
3737
.screen = &screen,
3838
.raw_key_events = SDL_FALSE,
39+
.hybrid_key_events = SDL_FALSE,
3940
};
4041

4142
#if defined(__APPLE__) || defined(__WINDOWS__)

0 commit comments

Comments
 (0)