diff options
author | Simon Ser <contact@emersion.fr> | 2023-11-16 14:56:46 +0100 |
---|---|---|
committer | Kenny Levinsen <kl@kl.wtf> | 2023-11-16 16:29:07 +0100 |
commit | 7036769bea886ab1f9d627785f14cea9e25b16f7 (patch) | |
tree | 73df7ae212c8f2587abd9860bcb54be3c831a6fb /sway/input/seat.c | |
parent | caa92ddee81b4af121773abc048ab79ea6df0a98 (diff) |
Only reconfigure input mappings on output change
Fully reconfiguring all input devices on output change takes a
loooong time. Let's just reconfigure what we need: only mappings
depend on outputs.
Diffstat (limited to 'sway/input/seat.c')
-rw-r--r-- | sway/input/seat.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/sway/input/seat.c b/sway/input/seat.c index bafdbcf3..f73946b1 100644 --- a/sway/input/seat.c +++ b/sway/input/seat.c @@ -710,6 +710,15 @@ static void seat_apply_input_mapping(struct sway_seat *seat, struct input_config *ic = input_device_get_config(sway_device->input_device); + switch (sway_device->input_device->wlr_device->type) { + case WLR_INPUT_DEVICE_POINTER: + case WLR_INPUT_DEVICE_TOUCH: + case WLR_INPUT_DEVICE_TABLET_TOOL: + break; + default: + return; // these devices don't support mappings + } + sway_log(SWAY_DEBUG, "Applying input mapping to %s", sway_device->input_device->identifier); @@ -799,7 +808,6 @@ static void seat_configure_pointer(struct sway_seat *seat, } wlr_cursor_attach_input_device(seat->cursor->cursor, sway_device->input_device->wlr_device); - seat_apply_input_mapping(seat, sway_device); wl_event_source_timer_update( seat->cursor->hide_source, cursor_get_timeout(seat->cursor)); } @@ -841,7 +849,6 @@ static void seat_configure_touch(struct sway_seat *seat, struct sway_seat_device *sway_device) { wlr_cursor_attach_input_device(seat->cursor->cursor, sway_device->input_device->wlr_device); - seat_apply_input_mapping(seat, sway_device); } static void seat_configure_tablet_tool(struct sway_seat *seat, @@ -852,7 +859,6 @@ static void seat_configure_tablet_tool(struct sway_seat *seat, sway_configure_tablet(sway_device->tablet); wlr_cursor_attach_input_device(seat->cursor->cursor, sway_device->input_device->wlr_device); - seat_apply_input_mapping(seat, sway_device); } static void seat_configure_tablet_pad(struct sway_seat *seat, @@ -909,6 +915,18 @@ void seat_configure_device(struct sway_seat *seat, seat_configure_tablet_pad(seat, seat_device); break; } + + seat_apply_input_mapping(seat, seat_device); +} + +void seat_configure_device_mapping(struct sway_seat *seat, + struct sway_input_device *input_device) { + struct sway_seat_device *seat_device = seat_get_device(seat, input_device); + if (!seat_device) { + return; + } + + seat_apply_input_mapping(seat, seat_device); } void seat_reset_device(struct sway_seat *seat, |