aboutsummaryrefslogtreecommitdiffstats
path: root/sway/input/input-manager.c
diff options
context:
space:
mode:
authorLibravatar Yaroslav de la Peña Smirnov <yps@yaroslavps.com>2022-10-23 03:09:38 +0300
committerLibravatar Simon Ser <contact@emersion.fr>2022-10-23 11:56:29 +0200
commit9d99bb956fea8922f8e0196d67eabbd510c53f1f (patch)
tree446b69802f7a1278710bb90d56f017d2d29ff439 /sway/input/input-manager.c
parentinput: tweak focus behavior to allow focusing parent containers (diff)
downloadsway-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.c11
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
279static void handle_inhibit_activate(struct wl_listener *listener, void *data) { 283static 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
529static void input_manager_configure_input( 533static 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
538void input_manager_configure_all_inputs(void) { 545void input_manager_configure_all_inputs(void) {