diff options
author | Tadeo Kondrak <me@tadeo.ca> | 2019-10-28 18:26:00 -0600 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2019-11-17 13:34:24 +0100 |
commit | 4829f1c26a521a4ef6659d91505112cc0be8d237 (patch) | |
tree | 4e0987c668241600401755630afe40c3879ca06a /sway/input | |
parent | df1a0468756b4a6d68cc5904313c4630edf14dd1 (diff) | |
download | sway-4829f1c26a521a4ef6659d91505112cc0be8d237.tar.xz |
Implement input map_to_region command
Diffstat (limited to 'sway/input')
-rw-r--r-- | sway/input/seat.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/sway/input/seat.c b/sway/input/seat.c index dc21ce61..5fc23a19 100644 --- a/sway/input/seat.c +++ b/sway/input/seat.c @@ -576,6 +576,7 @@ static void seat_reset_input_config(struct sway_seat *seat, static void seat_apply_input_config(struct sway_seat *seat, struct sway_seat_device *sway_device) { const char *mapped_to_output = NULL; + struct wlr_box *mapped_to_region = NULL; struct input_config *ic = input_device_get_config( sway_device->input_device); @@ -583,12 +584,31 @@ static void seat_apply_input_config(struct sway_seat *seat, sway_log(SWAY_DEBUG, "Applying input config to %s", sway_device->input_device->identifier); + // We use an empty string as a marker to clear the mapped_to_output + // property, because a NULL set in a handler_context isn't preserved. + if (ic->mapped_to_output != NULL && ic->mapped_to_output[0] == '\0') { + free(ic->mapped_to_output); + ic->mapped_to_output = NULL; + wlr_cursor_map_input_to_output(seat->cursor->cursor, + sway_device->input_device->wlr_device, NULL); + } + mapped_to_output = ic->mapped_to_output; + if (mapped_to_output != NULL) { + // Output has just been set, clear region setting. + free(ic->mapped_to_region); + ic->mapped_to_region = NULL; + wlr_cursor_map_input_to_region(seat->cursor->cursor, + sway_device->input_device->wlr_device, NULL); + } + + mapped_to_region = ic->mapped_to_region; } - if (mapped_to_output == NULL) { + if (mapped_to_output == NULL && mapped_to_region == NULL) { mapped_to_output = sway_device->input_device->wlr_device->output_name; } + if (mapped_to_output != NULL) { sway_log(SWAY_DEBUG, "Mapping input device %s to output %s", sway_device->input_device->identifier, mapped_to_output); @@ -604,6 +624,13 @@ static void seat_apply_input_config(struct sway_seat *seat, sway_device->input_device->wlr_device, output->wlr_output); sway_log(SWAY_DEBUG, "Mapped to output %s", output->wlr_output->name); } + } else if (mapped_to_region != NULL) { + sway_log(SWAY_DEBUG, "Mapping input device %s to %d,%d %dx%d", + sway_device->input_device->identifier, + mapped_to_region->x, mapped_to_region->y, + mapped_to_region->width, mapped_to_region->height); + wlr_cursor_map_input_to_region(seat->cursor->cursor, + sway_device->input_device->wlr_device, mapped_to_region); } } |