Refactor actions calls

The purpose of handle_shortcut() was to group all actions together,
whether they are initiated from a text input event or a keycode event.

However, it did not handle the case where it was initiated from a mouse
event (a right-click must turn the screen on), since the action was
identified by the shortcut char.

Instead, expose one function per action, to be called directly from
where the event is handled.
This commit is contained in:
Romain Vimont 2018-02-02 15:23:04 +01:00
parent d73dee9833
commit 69a359c7f4

View file

@ -293,6 +293,30 @@ static void send_keycode(enum android_keycode keycode, const char *name) {
} }
} }
static inline void action_home(void) {
send_keycode(AKEYCODE_HOME, "HOME");
}
static inline void action_back(void) {
send_keycode(AKEYCODE_BACK, "BACK");
}
static inline void action_app_switch(void) {
send_keycode(AKEYCODE_APP_SWITCH, "APP_SWITCH");
}
static inline void action_power(void) {
send_keycode(AKEYCODE_POWER, "POWER");
}
static inline void action_volume_up(void) {
send_keycode(AKEYCODE_VOLUME_UP, "VOLUME_UP");
}
static inline void action_volume_down(void) {
send_keycode(AKEYCODE_VOLUME_DOWN, "VOLUME_DOWN");
}
static void turn_screen_on(void) { static void turn_screen_on(void) {
struct control_event control_event = { struct control_event control_event = {
.type = CONTROL_EVENT_TYPE_COMMAND, .type = CONTROL_EVENT_TYPE_COMMAND,
@ -332,41 +356,16 @@ static SDL_bool is_ctrl_down(void) {
return state[SDL_SCANCODE_LCTRL] || state[SDL_SCANCODE_RCTRL]; return state[SDL_SCANCODE_LCTRL] || state[SDL_SCANCODE_RCTRL];
} }
static void handle_shortcut(char c) {
switch (c) {
case 'h':
send_keycode(AKEYCODE_HOME, "HOME");
break;
case 'b':
send_keycode(AKEYCODE_BACK, "BACK");
break;
case 'm':
send_keycode(AKEYCODE_APP_SWITCH, "APP_SWITCH");
break;
case 'p':
send_keycode(AKEYCODE_POWER, "POWER");
break;
case '+':
send_keycode(AKEYCODE_VOLUME_UP, "VOLUME_UP");
break;
case '-':
send_keycode(AKEYCODE_VOLUME_DOWN, "VOLUME_DOWN");
break;
case 'f':
switch_fullscreen();
break;
case 'x':
resize_to_fit();
break;
case 'g':
resize_to_pixel_perfect();
break;
}
}
static void handle_text_input(const SDL_TextInputEvent *event) { static void handle_text_input(const SDL_TextInputEvent *event) {
if (is_ctrl_down()) { if (is_ctrl_down()) {
handle_shortcut(event->text[0]); switch (event->text[0]) {
case '+':
action_volume_up();
break;
case '-':
action_volume_down();
break;
}
return; return;
} }
@ -398,27 +397,27 @@ static void handle_key(const SDL_KeyboardEvent *event) {
} }
switch (keycode) { switch (keycode) {
case SDLK_f:
handle_shortcut('f');
return;
case SDLK_x:
handle_shortcut('x');
return;
case SDLK_g:
handle_shortcut('g');
return;
case SDLK_h: case SDLK_h:
handle_shortcut('h'); action_home();
return; return;
case SDLK_b: // fall-through case SDLK_b: // fall-through
case SDLK_BACKSPACE: case SDLK_BACKSPACE:
handle_shortcut('b'); action_back();
return; return;
case SDLK_m: case SDLK_m:
handle_shortcut('m'); action_app_switch();
return; return;
case SDLK_p: case SDLK_p:
handle_shortcut('p'); action_power();
return;
case SDLK_f:
switch_fullscreen();
return;
case SDLK_x:
resize_to_fit();
return;
case SDLK_g:
resize_to_pixel_perfect();
return; return;
} }