mirror of
https://github.com/NickHu/sway
synced 2024-12-26 21:58:30 +01:00
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:
parent
5e514e6474
commit
9d99bb956f
3 changed files with 13 additions and 8 deletions
|
@ -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);
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue