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.
This commit is contained in:
Yaroslav de la Peña Smirnov 2022-10-23 03:09:38 +03:00 committed by Simon Ser
parent 5e514e6474
commit 9d99bb956f
3 changed files with 13 additions and 8 deletions

View file

@ -2,7 +2,7 @@
#define _SWAY_INPUT_LIBINPUT_H
#include "sway/input/input-manager.h"
void sway_input_configure_libinput_device(struct sway_input_device *device);
bool sway_input_configure_libinput_device(struct sway_input_device *device);
void sway_input_reset_libinput_device(struct sway_input_device *device);

View file

@ -236,7 +236,7 @@ static void handle_new_input(struct wl_listener *listener, void *data) {
apply_input_type_config(input_device);
sway_input_configure_libinput_device(input_device);
bool config_changed = sway_input_configure_libinput_device(input_device);
wl_signal_add(&device->events.destroy, &input_device->device_destroy);
input_device->device_destroy.notify = handle_device_destroy;
@ -274,6 +274,10 @@ static void handle_new_input(struct wl_listener *listener, void *data) {
}
ipc_event_input("added", input_device);
if (config_changed) {
ipc_event_input("libinput_config", input_device);
}
}
static void handle_inhibit_activate(struct wl_listener *listener, void *data) {
@ -528,11 +532,14 @@ static void retranslate_keysyms(struct input_config *input_config) {
static void input_manager_configure_input(
struct sway_input_device *input_device) {
sway_input_configure_libinput_device(input_device);
bool config_changed = sway_input_configure_libinput_device(input_device);
struct sway_seat *seat = NULL;
wl_list_for_each(seat, &server.input->seats, link) {
seat_configure_device(seat, input_device);
}
if (config_changed) {
ipc_event_input("libinput_config", input_device);
}
}
void input_manager_configure_all_inputs(void) {

View file

@ -187,10 +187,10 @@ static bool set_calibration_matrix(struct libinput_device *dev, float mat[6]) {
return changed;
}
void sway_input_configure_libinput_device(struct sway_input_device *input_device) {
bool sway_input_configure_libinput_device(struct sway_input_device *input_device) {
struct input_config *ic = input_device_get_config(input_device);
if (!ic || !wlr_input_device_is_libinput(input_device->wlr_device)) {
return;
return false;
}
struct libinput_device *device =
@ -259,9 +259,7 @@ void sway_input_configure_libinput_device(struct sway_input_device *input_device
changed |= set_calibration_matrix(device, ic->calibration_matrix.matrix);
}
if (changed) {
ipc_event_input("libinput_config", input_device);
}
return changed;
}
void sway_input_reset_libinput_device(struct sway_input_device *input_device) {