diff --git a/sway/input/input-manager.c b/sway/input/input-manager.c index 4459c43bc..128a818a0 100644 --- a/sway/input/input-manager.c +++ b/sway/input/input-manager.c @@ -6,6 +6,7 @@ #include #include #include +#include #include "sway/config.h" #include "sway/input/input-manager.h" #include "sway/input/seat.h" @@ -82,6 +83,75 @@ static bool input_has_seat_configuration(struct sway_input_manager *input) { return false; } +static void sway_input_manager_libinput_config_pointer(struct sway_input_device *input_device) { + struct wlr_input_device *wlr_device = input_device->wlr_device; + struct input_config *ic = input_device->config; + struct libinput_device *libinput_device; + + if (!ic || !wlr_input_device_is_libinput(wlr_device)) { + return; + } + + libinput_device = wlr_libinput_get_device_handle(wlr_device); + sway_log(L_DEBUG, "sway_input_manager_libinput_config_pointer(%s)", ic->identifier); + + if (ic->accel_profile != INT_MIN) { + sway_log(L_DEBUG, "libinput_config_pointer(%s) accel_set_profile(%d)", + ic->identifier, ic->accel_profile); + libinput_device_config_accel_set_profile(libinput_device, ic->accel_profile); + } + if (ic->click_method != INT_MIN) { + sway_log(L_DEBUG, "libinput_config_pointer(%s) click_set_method(%d)", + ic->identifier, ic->click_method); + libinput_device_config_click_set_method(libinput_device, ic->click_method); + } + if (ic->drag_lock != INT_MIN) { + sway_log(L_DEBUG, "libinput_config_pointer(%s) tap_set_drag_lock_enabled(%d)", + ic->identifier, ic->click_method); + libinput_device_config_tap_set_drag_lock_enabled(libinput_device, ic->drag_lock); + } + if (ic->dwt != INT_MIN) { + sway_log(L_DEBUG, "libinput_config_pointer(%s) dwt_set_enabled(%d)", + ic->identifier, ic->dwt); + libinput_device_config_dwt_set_enabled(libinput_device, ic->dwt); + } + if (ic->left_handed != INT_MIN) { + sway_log(L_DEBUG, "libinput_config_pointer(%s) left_handed_set_enabled(%d)", + ic->identifier, ic->left_handed); + libinput_device_config_left_handed_set(libinput_device, ic->left_handed); + } + if (ic->middle_emulation != INT_MIN) { + sway_log(L_DEBUG, "libinput_config_pointer(%s) middle_emulation_set_enabled(%d)", + ic->identifier, ic->middle_emulation); + libinput_device_config_middle_emulation_set_enabled(libinput_device, ic->middle_emulation); + } + if (ic->natural_scroll != INT_MIN) { + sway_log(L_DEBUG, "libinput_config_pointer(%s) natural_scroll_set_enabled(%d)", + ic->identifier, ic->natural_scroll); + libinput_device_config_scroll_set_natural_scroll_enabled(libinput_device, ic->natural_scroll); + } + if (ic->pointer_accel != FLT_MIN) { + sway_log(L_DEBUG, "libinput_config_pointer(%s) accel_set_speed(%f)", + ic->identifier, ic->pointer_accel); + libinput_device_config_accel_set_speed(libinput_device, ic->pointer_accel); + } + if (ic->scroll_method != INT_MIN) { + sway_log(L_DEBUG, "libinput_config_pointer(%s) scroll_set_method(%d)", + ic->identifier, ic->scroll_method); + libinput_device_config_scroll_set_method(libinput_device, ic->scroll_method); + } + if (ic->send_events != INT_MIN) { + sway_log(L_DEBUG, "libinput_config_pointer(%s) send_events_set_mode(%d)", + ic->identifier, ic->send_events); + libinput_device_config_send_events_set_mode(libinput_device, ic->send_events); + } + if (ic->tap != INT_MIN) { + sway_log(L_DEBUG, "libinput_config_pointer(%s) tap_set_enabled(%d)", + ic->identifier, ic->tap); + libinput_device_config_tap_set_enabled(libinput_device, ic->tap); + } +} + static void input_add_notify(struct wl_listener *listener, void *data) { struct sway_input_manager *input = wl_container_of(listener, input, input_add); @@ -109,6 +179,10 @@ static void input_add_notify(struct wl_listener *listener, void *data) { } } + if (input_device->wlr_device->type == WLR_INPUT_DEVICE_POINTER) { + sway_input_manager_libinput_config_pointer(input_device); + } + struct sway_seat *seat = NULL; if (!input_has_seat_configuration(input)) { sway_log(L_DEBUG, "no seat configuration, using default seat"); @@ -221,6 +295,10 @@ void sway_input_manager_apply_input_config(struct sway_input_manager *input, if (strcmp(input_device->identifier, input_config->identifier) == 0) { input_device->config = input_config; + if (input_device->wlr_device->type == WLR_INPUT_DEVICE_POINTER) { + sway_input_manager_libinput_config_pointer(input_device); + } + struct sway_seat *seat = NULL; wl_list_for_each(seat, &input->seats, link) { sway_seat_configure_device(seat, input_device); diff --git a/sway/input/seat.c b/sway/input/seat.c index fe90565a4..9a6a667bd 100644 --- a/sway/input/seat.c +++ b/sway/input/seat.c @@ -58,7 +58,6 @@ struct sway_seat *sway_seat_create(struct sway_input_manager *input, static void seat_configure_pointer(struct sway_seat *seat, struct sway_seat_device *sway_device) { - // TODO pointer configuration wlr_cursor_attach_input_device(seat->cursor->cursor, sway_device->input_device->wlr_device); }