Explicitly pass control flag to input manager

Replace the "global" control flag in the input_manager by a function
parameter to make explicit that the behavior depends whether
--no-control has been set.
This commit is contained in:
Romain Vimont 2019-03-03 11:05:26 +01:00
parent 6baed8a06f
commit f7efafd846
3 changed files with 11 additions and 16 deletions

View file

@ -191,7 +191,8 @@ input_manager_process_text_input(struct input_manager *input_manager,
void void
input_manager_process_key(struct input_manager *input_manager, input_manager_process_key(struct input_manager *input_manager,
const SDL_KeyboardEvent *event) { const SDL_KeyboardEvent *event,
bool control) {
bool ctrl = event->keysym.mod & (KMOD_LCTRL | KMOD_RCTRL); bool ctrl = event->keysym.mod & (KMOD_LCTRL | KMOD_RCTRL);
bool alt = event->keysym.mod & (KMOD_LALT | KMOD_RALT); bool alt = event->keysym.mod & (KMOD_LALT | KMOD_RALT);
bool meta = event->keysym.mod & (KMOD_LGUI | KMOD_RGUI); bool meta = event->keysym.mod & (KMOD_LGUI | KMOD_RGUI);
@ -202,9 +203,6 @@ input_manager_process_key(struct input_manager *input_manager,
return; return;
} }
// false if the user requested not to interact with the device
bool control = input_manager->control;
// capture all Ctrl events // capture all Ctrl events
if (ctrl | meta) { if (ctrl | meta) {
SDL_Keycode keycode = event->keysym.sym; SDL_Keycode keycode = event->keysym.sym;
@ -341,10 +339,8 @@ is_outside_device_screen(struct input_manager *input_manager, int x, int y)
void void
input_manager_process_mouse_button(struct input_manager *input_manager, input_manager_process_mouse_button(struct input_manager *input_manager,
const SDL_MouseButtonEvent *event) { const SDL_MouseButtonEvent *event,
// false if the user requested not to interact with the device bool control) {
bool control = input_manager->control;
if (event->type == SDL_MOUSEBUTTONDOWN) { if (event->type == SDL_MOUSEBUTTONDOWN) {
if (control && event->button == SDL_BUTTON_RIGHT) { if (control && event->button == SDL_BUTTON_RIGHT) {
press_back_or_turn_screen_on(input_manager->controller); press_back_or_turn_screen_on(input_manager->controller);

View file

@ -13,7 +13,6 @@ struct input_manager {
struct controller *controller; struct controller *controller;
struct video_buffer *video_buffer; struct video_buffer *video_buffer;
struct screen *screen; struct screen *screen;
bool control;
}; };
void void
@ -22,7 +21,8 @@ input_manager_process_text_input(struct input_manager *input_manager,
void void
input_manager_process_key(struct input_manager *input_manager, input_manager_process_key(struct input_manager *input_manager,
const SDL_KeyboardEvent *event); const SDL_KeyboardEvent *event,
bool control);
void void
input_manager_process_mouse_motion(struct input_manager *input_manager, input_manager_process_mouse_motion(struct input_manager *input_manager,
@ -30,7 +30,8 @@ input_manager_process_mouse_motion(struct input_manager *input_manager,
void void
input_manager_process_mouse_button(struct input_manager *input_manager, input_manager_process_mouse_button(struct input_manager *input_manager,
const SDL_MouseButtonEvent *event); const SDL_MouseButtonEvent *event,
bool control);
void void
input_manager_process_mouse_wheel(struct input_manager *input_manager, input_manager_process_mouse_wheel(struct input_manager *input_manager,

View file

@ -39,7 +39,6 @@ static struct input_manager input_manager = {
.controller = &controller, .controller = &controller,
.video_buffer = &video_buffer, .video_buffer = &video_buffer,
.screen = &screen, .screen = &screen,
.control = true,
}; };
// init SDL and set appropriate hints // init SDL and set appropriate hints
@ -146,7 +145,7 @@ handle_event(SDL_Event *event, bool control) {
case SDL_KEYUP: case SDL_KEYUP:
// some key events do not interact with the device, so process the // some key events do not interact with the device, so process the
// event even if control is disabled // event even if control is disabled
input_manager_process_key(&input_manager, &event->key); input_manager_process_key(&input_manager, &event->key, control);
break; break;
case SDL_MOUSEMOTION: case SDL_MOUSEMOTION:
if (!control) { if (!control) {
@ -164,7 +163,8 @@ handle_event(SDL_Event *event, bool control) {
case SDL_MOUSEBUTTONUP: case SDL_MOUSEBUTTONUP:
// some mouse events do not interact with the device, so process // some mouse events do not interact with the device, so process
// the event even if control is disabled // the event even if control is disabled
input_manager_process_mouse_button(&input_manager, &event->button); input_manager_process_mouse_button(&input_manager, &event->button,
control);
break; break;
case SDL_DROPFILE: { case SDL_DROPFILE: {
if (!control) { if (!control) {
@ -301,8 +301,6 @@ scrcpy(const struct scrcpy_options *options) {
goto finally_destroy_server; goto finally_destroy_server;
} }
input_manager.control = control;
struct decoder *dec = NULL; struct decoder *dec = NULL;
if (display) { if (display) {
if (!video_buffer_init(&video_buffer)) { if (!video_buffer_init(&video_buffer)) {