diff options
author | Yaroslav de la Peña Smirnov <yps@yaroslavps.com> | 2022-10-23 03:09:38 +0300 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2022-10-23 11:56:29 +0200 |
commit | 9d99bb956fea8922f8e0196d67eabbd510c53f1f (patch) | |
tree | 446b69802f7a1278710bb90d56f017d2d29ff439 /sway/input/input-manager.c | |
parent | input: tweak focus behavior to allow focusing parent containers (diff) | |
download | sway-9d99bb956fea8922f8e0196d67eabbd510c53f1f.tar.gz sway-9d99bb956fea8922f8e0196d67eabbd510c53f1f.tar.zst sway-9d99bb956fea8922f8e0196d67eabbd510c53f1f.zip |
Fix keymap being NULL and segfaulting on dev add
Moved `libinput_config` to the callers of
`sway_input_configure_libinput_device` so that we send the event after
the added event.
Diffstat (limited to 'sway/input/input-manager.c')
-rw-r--r-- | sway/input/input-manager.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/sway/input/input-manager.c b/sway/input/input-manager.c index 4a0bce0e..26eefc8a 100644 --- a/sway/input/input-manager.c +++ b/sway/input/input-manager.c | |||
@@ -236,7 +236,7 @@ static void handle_new_input(struct wl_listener *listener, void *data) { | |||
236 | 236 | ||
237 | apply_input_type_config(input_device); | 237 | apply_input_type_config(input_device); |
238 | 238 | ||
239 | sway_input_configure_libinput_device(input_device); | 239 | bool config_changed = sway_input_configure_libinput_device(input_device); |
240 | 240 | ||
241 | wl_signal_add(&device->events.destroy, &input_device->device_destroy); | 241 | wl_signal_add(&device->events.destroy, &input_device->device_destroy); |
242 | input_device->device_destroy.notify = handle_device_destroy; | 242 | input_device->device_destroy.notify = handle_device_destroy; |
@@ -274,6 +274,10 @@ static void handle_new_input(struct wl_listener *listener, void *data) { | |||
274 | } | 274 | } |
275 | 275 | ||
276 | ipc_event_input("added", input_device); | 276 | ipc_event_input("added", input_device); |
277 | |||
278 | if (config_changed) { | ||
279 | ipc_event_input("libinput_config", input_device); | ||
280 | } | ||
277 | } | 281 | } |
278 | 282 | ||
279 | static void handle_inhibit_activate(struct wl_listener *listener, void *data) { | 283 | static void handle_inhibit_activate(struct wl_listener *listener, void *data) { |
@@ -528,11 +532,14 @@ static void retranslate_keysyms(struct input_config *input_config) { | |||
528 | 532 | ||
529 | static void input_manager_configure_input( | 533 | static void input_manager_configure_input( |
530 | struct sway_input_device *input_device) { | 534 | struct sway_input_device *input_device) { |
531 | sway_input_configure_libinput_device(input_device); | 535 | bool config_changed = sway_input_configure_libinput_device(input_device); |
532 | struct sway_seat *seat = NULL; | 536 | struct sway_seat *seat = NULL; |
533 | wl_list_for_each(seat, &server.input->seats, link) { | 537 | wl_list_for_each(seat, &server.input->seats, link) { |
534 | seat_configure_device(seat, input_device); | 538 | seat_configure_device(seat, input_device); |
535 | } | 539 | } |
540 | if (config_changed) { | ||
541 | ipc_event_input("libinput_config", input_device); | ||
542 | } | ||
536 | } | 543 | } |
537 | 544 | ||
538 | void input_manager_configure_all_inputs(void) { | 545 | void input_manager_configure_all_inputs(void) { |