mirror of
https://github.com/swaywm/sway.git
synced 2024-11-29 11:21:28 +00: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
|
@ -2,7 +2,7 @@
|
||||||
#define _SWAY_INPUT_LIBINPUT_H
|
#define _SWAY_INPUT_LIBINPUT_H
|
||||||
#include "sway/input/input-manager.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);
|
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);
|
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);
|
wl_signal_add(&device->events.destroy, &input_device->device_destroy);
|
||||||
input_device->device_destroy.notify = handle_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);
|
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) {
|
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(
|
static void input_manager_configure_input(
|
||||||
struct sway_input_device *input_device) {
|
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;
|
struct sway_seat *seat = NULL;
|
||||||
wl_list_for_each(seat, &server.input->seats, link) {
|
wl_list_for_each(seat, &server.input->seats, link) {
|
||||||
seat_configure_device(seat, input_device);
|
seat_configure_device(seat, input_device);
|
||||||
}
|
}
|
||||||
|
if (config_changed) {
|
||||||
|
ipc_event_input("libinput_config", input_device);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void input_manager_configure_all_inputs(void) {
|
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;
|
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);
|
struct input_config *ic = input_device_get_config(input_device);
|
||||||
if (!ic || !wlr_input_device_is_libinput(input_device->wlr_device)) {
|
if (!ic || !wlr_input_device_is_libinput(input_device->wlr_device)) {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct libinput_device *device =
|
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);
|
changed |= set_calibration_matrix(device, ic->calibration_matrix.matrix);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changed) {
|
return changed;
|
||||||
ipc_event_input("libinput_config", input_device);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void sway_input_reset_libinput_device(struct sway_input_device *input_device) {
|
void sway_input_reset_libinput_device(struct sway_input_device *input_device) {
|
||||||
|
|
Loading…
Reference in a new issue