mirror of
https://github.com/swaywm/sway.git
synced 2025-11-03 09:01:43 -05:00
ipc: describe libinput device configuration
This adds the device configurations to the ipc response for libinput devices. Only supported configuration options for the device will be added. This also moves `libinput_send_events` inside a new `libinput` object that contains the rest of the configuration options. sway-ipc(7) has been updated to reflect the changes and document the new additions.
This commit is contained in:
parent
0df76ed96a
commit
7f700e08ac
3 changed files with 317 additions and 35 deletions
198
sway/ipc-json.c
198
sway/ipc-json.c
|
|
@ -617,6 +617,187 @@ json_object *ipc_json_describe_node_recursive(struct sway_node *node) {
|
|||
return object;
|
||||
}
|
||||
|
||||
static json_object *describe_libinput_device(struct libinput_device *device) {
|
||||
json_object *object = json_object_new_object();
|
||||
|
||||
const char *events = "unknown";
|
||||
switch (libinput_device_config_send_events_get_mode(device)) {
|
||||
case LIBINPUT_CONFIG_SEND_EVENTS_ENABLED:
|
||||
events = "enabled";
|
||||
break;
|
||||
case LIBINPUT_CONFIG_SEND_EVENTS_DISABLED_ON_EXTERNAL_MOUSE:
|
||||
events = "disabled_on_external_mouse";
|
||||
break;
|
||||
case LIBINPUT_CONFIG_SEND_EVENTS_DISABLED:
|
||||
events = "disabled";
|
||||
break;
|
||||
}
|
||||
json_object_object_add(object, "send_events",
|
||||
json_object_new_string(events));
|
||||
|
||||
if (libinput_device_config_tap_get_finger_count(device) > 0) {
|
||||
const char *tap = "unknown";
|
||||
switch (libinput_device_config_tap_get_enabled(device)) {
|
||||
case LIBINPUT_CONFIG_TAP_ENABLED:
|
||||
tap = "enabled";
|
||||
break;
|
||||
case LIBINPUT_CONFIG_TAP_DISABLED:
|
||||
tap = "disabled";
|
||||
break;
|
||||
}
|
||||
json_object_object_add(object, "tap", json_object_new_string(tap));
|
||||
|
||||
const char *button_map = "unknown";
|
||||
switch (libinput_device_config_tap_get_button_map(device)) {
|
||||
case LIBINPUT_CONFIG_TAP_MAP_LRM:
|
||||
button_map = "lrm";
|
||||
break;
|
||||
case LIBINPUT_CONFIG_TAP_MAP_LMR:
|
||||
button_map = "lmr";
|
||||
break;
|
||||
}
|
||||
json_object_object_add(object, "tap_button_map",
|
||||
json_object_new_string(button_map));
|
||||
|
||||
const char* drag = "unknown";
|
||||
switch (libinput_device_config_tap_get_drag_enabled(device)) {
|
||||
case LIBINPUT_CONFIG_DRAG_ENABLED:
|
||||
drag = "enabled";
|
||||
break;
|
||||
case LIBINPUT_CONFIG_DRAG_DISABLED:
|
||||
drag = "disabled";
|
||||
break;
|
||||
}
|
||||
json_object_object_add(object, "tap_drag",
|
||||
json_object_new_string(drag));
|
||||
|
||||
const char *drag_lock = "unknown";
|
||||
switch (libinput_device_config_tap_get_drag_lock_enabled(device)) {
|
||||
case LIBINPUT_CONFIG_DRAG_LOCK_ENABLED:
|
||||
drag_lock = "enabled";
|
||||
break;
|
||||
case LIBINPUT_CONFIG_DRAG_LOCK_DISABLED:
|
||||
drag_lock = "disabled";
|
||||
break;
|
||||
}
|
||||
json_object_object_add(object, "tap_drag_lock",
|
||||
json_object_new_string(drag_lock));
|
||||
}
|
||||
|
||||
if (libinput_device_config_accel_is_available(device)) {
|
||||
double accel = libinput_device_config_accel_get_speed(device);
|
||||
json_object_object_add(object, "accel_speed",
|
||||
json_object_new_double(accel));
|
||||
|
||||
const char *accel_profile = "unknown";
|
||||
switch (libinput_device_config_accel_get_profile(device)) {
|
||||
case LIBINPUT_CONFIG_ACCEL_PROFILE_NONE:
|
||||
accel_profile = "none";
|
||||
break;
|
||||
case LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT:
|
||||
accel_profile = "flat";
|
||||
break;
|
||||
case LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE:
|
||||
accel_profile = "adaptive";
|
||||
break;
|
||||
}
|
||||
json_object_object_add(object, "accel_profile",
|
||||
json_object_new_string(accel_profile));
|
||||
}
|
||||
|
||||
if (libinput_device_config_scroll_has_natural_scroll(device)) {
|
||||
const char *natural_scroll = "disabled";
|
||||
if (libinput_device_config_scroll_get_natural_scroll_enabled(device)) {
|
||||
natural_scroll = "enabled";
|
||||
}
|
||||
json_object_object_add(object, "natural_scroll",
|
||||
json_object_new_string(natural_scroll));
|
||||
}
|
||||
|
||||
if (libinput_device_config_left_handed_is_available(device)) {
|
||||
const char *left_handed = "disabled";
|
||||
if (libinput_device_config_left_handed_get(device) != 0) {
|
||||
left_handed = "enabled";
|
||||
}
|
||||
json_object_object_add(object, "left_handed",
|
||||
json_object_new_string(left_handed));
|
||||
}
|
||||
|
||||
uint32_t click_methods = libinput_device_config_click_get_methods(device);
|
||||
if ((click_methods & ~LIBINPUT_CONFIG_CLICK_METHOD_NONE) != 0) {
|
||||
const char *click_method = "unknown";
|
||||
switch (libinput_device_config_click_get_method(device)) {
|
||||
case LIBINPUT_CONFIG_CLICK_METHOD_NONE:
|
||||
click_method = "none";
|
||||
break;
|
||||
case LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS:
|
||||
click_method = "button_areas";
|
||||
break;
|
||||
case LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER:
|
||||
click_method = "clickfinger";
|
||||
break;
|
||||
}
|
||||
json_object_object_add(object, "click_method",
|
||||
json_object_new_string(click_method));
|
||||
}
|
||||
|
||||
if (libinput_device_config_middle_emulation_is_available(device)) {
|
||||
const char *middle_emulation = "unknown";
|
||||
switch (libinput_device_config_middle_emulation_get_enabled(device)) {
|
||||
case LIBINPUT_CONFIG_MIDDLE_EMULATION_ENABLED:
|
||||
middle_emulation = "enabled";
|
||||
break;
|
||||
case LIBINPUT_CONFIG_MIDDLE_EMULATION_DISABLED:
|
||||
middle_emulation = "disabled";
|
||||
break;
|
||||
}
|
||||
json_object_object_add(object, "middle_emulation",
|
||||
json_object_new_string(middle_emulation));
|
||||
}
|
||||
|
||||
uint32_t scroll_methods = libinput_device_config_scroll_get_methods(device);
|
||||
if ((scroll_methods & ~LIBINPUT_CONFIG_SCROLL_NO_SCROLL) != 0) {
|
||||
const char *scroll_method = "unknown";
|
||||
switch (libinput_device_config_scroll_get_method(device)) {
|
||||
case LIBINPUT_CONFIG_SCROLL_NO_SCROLL:
|
||||
scroll_method = "none";
|
||||
break;
|
||||
case LIBINPUT_CONFIG_SCROLL_2FG:
|
||||
scroll_method = "two_finger";
|
||||
break;
|
||||
case LIBINPUT_CONFIG_SCROLL_EDGE:
|
||||
scroll_method = "edge";
|
||||
break;
|
||||
case LIBINPUT_CONFIG_SCROLL_ON_BUTTON_DOWN:
|
||||
scroll_method = "on_button_down";
|
||||
break;
|
||||
}
|
||||
json_object_object_add(object, "scroll_method",
|
||||
json_object_new_string(scroll_method));
|
||||
|
||||
if ((scroll_methods & LIBINPUT_CONFIG_SCROLL_ON_BUTTON_DOWN) != 0) {
|
||||
uint32_t button = libinput_device_config_scroll_get_button(device);
|
||||
json_object_object_add(object, "scroll_button",
|
||||
json_object_new_int(button));
|
||||
}
|
||||
}
|
||||
|
||||
if (libinput_device_config_dwt_is_available(device)) {
|
||||
const char *dwt = "unknown";
|
||||
switch (libinput_device_config_dwt_get_enabled(device)) {
|
||||
case LIBINPUT_CONFIG_DWT_ENABLED:
|
||||
dwt = "enabled";
|
||||
break;
|
||||
case LIBINPUT_CONFIG_DWT_DISABLED:
|
||||
dwt = "disabled";
|
||||
break;
|
||||
}
|
||||
json_object_object_add(object, "dwt", json_object_new_string(dwt));
|
||||
}
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
json_object *ipc_json_describe_input(struct sway_input_device *device) {
|
||||
if (!(sway_assert(device, "Device must not be null"))) {
|
||||
return NULL;
|
||||
|
|
@ -660,21 +841,8 @@ json_object *ipc_json_describe_input(struct sway_input_device *device) {
|
|||
if (wlr_input_device_is_libinput(device->wlr_device)) {
|
||||
struct libinput_device *libinput_dev;
|
||||
libinput_dev = wlr_libinput_get_device_handle(device->wlr_device);
|
||||
|
||||
const char *events = "unknown";
|
||||
switch (libinput_device_config_send_events_get_mode(libinput_dev)) {
|
||||
case LIBINPUT_CONFIG_SEND_EVENTS_ENABLED:
|
||||
events = "enabled";
|
||||
break;
|
||||
case LIBINPUT_CONFIG_SEND_EVENTS_DISABLED_ON_EXTERNAL_MOUSE:
|
||||
events = "disabled_on_external_mouse";
|
||||
break;
|
||||
case LIBINPUT_CONFIG_SEND_EVENTS_DISABLED:
|
||||
events = "disabled";
|
||||
break;
|
||||
}
|
||||
json_object_object_add(object, "libinput_send_events",
|
||||
json_object_new_string(events));
|
||||
json_object_object_add(object, "libinput",
|
||||
describe_libinput_device(libinput_dev));
|
||||
}
|
||||
|
||||
return object;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue