diff --git a/src/module/module_sdl2.c b/src/module/module_sdl2.c index 4faaf76596f45a0c7b588530bec46fc7f7551df4..86ab4281d1832c690c466f37dff7d17ae3df1da8 100644 --- a/src/module/module_sdl2.c +++ b/src/module/module_sdl2.c @@ -108,6 +108,8 @@ sdl_thread__(struct poller_thread_arg *arg) SDL_Event event; uint64_t flags; int w, h, redraw = 0; + bool ctrl = false; + const Uint8 *state; free(arg); /* Init the SDL window @@ -172,24 +174,35 @@ loop: } break; + case SDL_KEYDOWN: + if (event.key.keysym.sym == SDLK_LEFT) { + const char *cmd_seek[] = { "seek", "-5", "relative", NULL }; + mpv_command_async((mpv_handle *) sdl2->mpv, 0, cmd_seek); + } else if (event.key.keysym.sym == SDLK_RIGHT) { + const char *cmd_seek[] = { "seek", "+5", "relative", NULL }; + mpv_command_async((mpv_handle *) sdl2->mpv, 0, cmd_seek); + } + break; + case SDL_KEYUP: - if (event.key.keysym.sym == SDLK_SPACE) { + state = SDL_GetKeyboardState(NULL); + ctrl = state[SDL_SCANCODE_LCTRL] || state[SDL_SCANCODE_RCTRL]; + + if (ctrl && event.key.keysym.sym == SDLK_SPACE) { const char *cmd_pause[] = { "cycle", "pause", NULL }; mpv_command_async((mpv_handle *) sdl2->mpv, 0, cmd_pause); } - else if (event.key.keysym.sym == SDLK_RETURN || - event.key.keysym.sym == SDLK_RETURN2 || - event.key.keysym.sym == SDLK_KP_ENTER) + else if (event.key.keysym.sym == SDLK_n && ctrl) lkt_queue_send(sdl2->queue, lkt_event_play_next, NULL); - else if (event.key.keysym.sym == SDLK_LEFT) { - const char *cmd_seek[] = { "seek", "-5", "relative", NULL }; - mpv_command_async((mpv_handle *) sdl2->mpv, 0, cmd_seek); - } else if (event.key.keysym.sym == SDLK_RIGHT) { - const char *cmd_seek[] = { "seek", "+5", "relative", NULL }; - mpv_command_async((mpv_handle *) sdl2->mpv, 0, cmd_seek); - } + else if (event.key.keysym.sym == SDLK_p && ctrl) + lkt_queue_send(sdl2->queue, lkt_event_play_prev, NULL); + + else if ((event.key.keysym.sym == SDLK_RETURN || + event.key.keysym.sym == SDLK_RETURN2 || + event.key.keysym.sym == SDLK_KP_ENTER) && ctrl) + lkt_queue_send(sdl2->queue, lkt_event_play_next, NULL); else if (event.key.keysym.sym == SDLK_F11) { if (sdl2->is_fullscreen) @@ -203,26 +216,6 @@ loop: break; case SDL_TEXTINPUT: - if (STR_MATCH(event.text.text, ">")) - lkt_queue_send(sdl2->queue, lkt_event_play_next, NULL); - else if (STR_MATCH(event.text.text, "<")) - lkt_queue_send(sdl2->queue, lkt_event_play_prev, NULL); - else if (STR_MATCH(event.text.text, "i")) { - /* - struct kara_metadata mdt; - int id; - char *str; - if (database_queue_current_kara(sdl2->db, &mdt, &id)) { - mdtcat(&mdt, &str); - const char *cmd[] = { "show-text", str, "4000", NULL }; - // Same size, only on 64bit arch... - // FIXME: Do something else in 32bits - mpv_command_async((mpv_handle *) sdl2->mpv, - (uint64_t) str, cmd); - } - */ - } else - LOG_ERROR("WINDOW", "Not handled text '%s'", event.text.text); break; default: