|
|
|
|
@@ -1,5 +1,5 @@
|
|
|
|
|
/*
|
|
|
|
|
* Copyright © 2013-2015 Red Hat, Inc.
|
|
|
|
|
* Copyright © 2013-2017 Red Hat, Inc.
|
|
|
|
|
*
|
|
|
|
|
* Permission to use, copy, modify, distribute, and sell this software
|
|
|
|
|
* and its documentation for any purpose is hereby granted without
|
|
|
|
|
@@ -212,6 +212,10 @@ update_mode_prop(InputInfoPtr pInfo,
|
|
|
|
|
static enum event_handling
|
|
|
|
|
xf86libinput_handle_event(struct libinput_event *event);
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
xf86libinput_post_tablet_motion(InputInfoPtr pInfo,
|
|
|
|
|
struct libinput_event_tablet_tool *event);
|
|
|
|
|
|
|
|
|
|
static inline int
|
|
|
|
|
use_server_fd(const InputInfoPtr pInfo) {
|
|
|
|
|
return pInfo->fd > -1 && (pInfo->flags & XI86_SERVER_FD);
|
|
|
|
|
@@ -457,19 +461,34 @@ xf86libinput_set_area_ratio(struct xf86libinput *driver_data,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* returns true if the device has one or more of the given capabilities or
|
|
|
|
|
* if the device isn't a subdevice
|
|
|
|
|
*/
|
|
|
|
|
static inline bool
|
|
|
|
|
subdevice_has_capabilities(DeviceIntPtr dev, uint32_t capabilities)
|
|
|
|
|
{
|
|
|
|
|
InputInfoPtr pInfo = dev->public.devicePrivate;
|
|
|
|
|
struct xf86libinput *driver_data = pInfo->private;
|
|
|
|
|
|
|
|
|
|
if (!xf86libinput_is_subdevice(pInfo))
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
return !!(driver_data->capabilities & capabilities);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
LibinputSetProperty(DeviceIntPtr dev, Atom atom, XIPropertyValuePtr val,
|
|
|
|
|
BOOL checkonly);
|
|
|
|
|
static void
|
|
|
|
|
LibinputInitProperty(DeviceIntPtr dev);
|
|
|
|
|
|
|
|
|
|
static inline void
|
|
|
|
|
LibinputApplyConfig(DeviceIntPtr dev)
|
|
|
|
|
static void
|
|
|
|
|
LibinputApplyConfigSendEvents(DeviceIntPtr dev,
|
|
|
|
|
struct xf86libinput *driver_data,
|
|
|
|
|
struct libinput_device *device)
|
|
|
|
|
{
|
|
|
|
|
InputInfoPtr pInfo = dev->public.devicePrivate;
|
|
|
|
|
struct xf86libinput *driver_data = pInfo->private;
|
|
|
|
|
struct libinput_device *device = driver_data->shared_device->device;
|
|
|
|
|
unsigned int scroll_button;
|
|
|
|
|
|
|
|
|
|
if (libinput_device_config_send_events_get_modes(device) != LIBINPUT_CONFIG_SEND_EVENTS_ENABLED &&
|
|
|
|
|
libinput_device_config_send_events_set_mode(device,
|
|
|
|
|
@@ -477,6 +496,17 @@ LibinputApplyConfig(DeviceIntPtr dev)
|
|
|
|
|
xf86IDrvMsg(pInfo, X_ERROR,
|
|
|
|
|
"Failed to set SendEventsMode %u\n",
|
|
|
|
|
driver_data->options.sendevents);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
LibinputApplyConfigNaturalScroll(DeviceIntPtr dev,
|
|
|
|
|
struct xf86libinput *driver_data,
|
|
|
|
|
struct libinput_device *device)
|
|
|
|
|
{
|
|
|
|
|
InputInfoPtr pInfo = dev->public.devicePrivate;
|
|
|
|
|
|
|
|
|
|
if (!subdevice_has_capabilities(dev, CAP_POINTER))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (libinput_device_config_scroll_has_natural_scroll(device) &&
|
|
|
|
|
libinput_device_config_scroll_set_natural_scroll_enabled(device,
|
|
|
|
|
@@ -484,6 +514,17 @@ LibinputApplyConfig(DeviceIntPtr dev)
|
|
|
|
|
xf86IDrvMsg(pInfo, X_ERROR,
|
|
|
|
|
"Failed to set NaturalScrolling to %d\n",
|
|
|
|
|
driver_data->options.natural_scrolling);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
LibinputApplyConfigAccel(DeviceIntPtr dev,
|
|
|
|
|
struct xf86libinput *driver_data,
|
|
|
|
|
struct libinput_device *device)
|
|
|
|
|
{
|
|
|
|
|
InputInfoPtr pInfo = dev->public.devicePrivate;
|
|
|
|
|
|
|
|
|
|
if (!subdevice_has_capabilities(dev, CAP_POINTER))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (libinput_device_config_accel_is_available(device) &&
|
|
|
|
|
libinput_device_config_accel_set_speed(device,
|
|
|
|
|
@@ -512,6 +553,17 @@ LibinputApplyConfig(DeviceIntPtr dev)
|
|
|
|
|
}
|
|
|
|
|
xf86IDrvMsg(pInfo, X_ERROR, "Failed to set profile %s\n", profile);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline void
|
|
|
|
|
LibinputApplyConfigTap(DeviceIntPtr dev,
|
|
|
|
|
struct xf86libinput *driver_data,
|
|
|
|
|
struct libinput_device *device)
|
|
|
|
|
{
|
|
|
|
|
InputInfoPtr pInfo = dev->public.devicePrivate;
|
|
|
|
|
|
|
|
|
|
if (!subdevice_has_capabilities(dev, CAP_POINTER))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (libinput_device_config_tap_get_finger_count(device) > 0 &&
|
|
|
|
|
libinput_device_config_tap_set_enabled(device,
|
|
|
|
|
@@ -548,6 +600,17 @@ LibinputApplyConfig(DeviceIntPtr dev)
|
|
|
|
|
xf86IDrvMsg(pInfo, X_ERROR,
|
|
|
|
|
"Failed to set Tapping Drag to %d\n",
|
|
|
|
|
driver_data->options.tap_drag);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
LibinputApplyConfigCalibration(DeviceIntPtr dev,
|
|
|
|
|
struct xf86libinput *driver_data,
|
|
|
|
|
struct libinput_device *device)
|
|
|
|
|
{
|
|
|
|
|
InputInfoPtr pInfo = dev->public.devicePrivate;
|
|
|
|
|
|
|
|
|
|
if (!subdevice_has_capabilities(dev, CAP_TOUCH|CAP_TABLET))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (libinput_device_config_calibration_has_matrix(device) &&
|
|
|
|
|
libinput_device_config_calibration_set_matrix(device,
|
|
|
|
|
@@ -560,6 +623,17 @@ LibinputApplyConfig(DeviceIntPtr dev)
|
|
|
|
|
driver_data->options.matrix[4], driver_data->options.matrix[5],
|
|
|
|
|
driver_data->options.matrix[6], driver_data->options.matrix[7],
|
|
|
|
|
driver_data->options.matrix[8]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
LibinputApplyConfigLeftHanded(DeviceIntPtr dev,
|
|
|
|
|
struct xf86libinput *driver_data,
|
|
|
|
|
struct libinput_device *device)
|
|
|
|
|
{
|
|
|
|
|
InputInfoPtr pInfo = dev->public.devicePrivate;
|
|
|
|
|
|
|
|
|
|
if (!subdevice_has_capabilities(dev, CAP_POINTER|CAP_TABLET))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (libinput_device_config_left_handed_is_available(device) &&
|
|
|
|
|
libinput_device_config_left_handed_set(device,
|
|
|
|
|
@@ -567,6 +641,17 @@ LibinputApplyConfig(DeviceIntPtr dev)
|
|
|
|
|
xf86IDrvMsg(pInfo, X_ERROR,
|
|
|
|
|
"Failed to set LeftHanded to %d\n",
|
|
|
|
|
driver_data->options.left_handed);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
LibinputApplyConfigScrollMethod(DeviceIntPtr dev,
|
|
|
|
|
struct xf86libinput *driver_data,
|
|
|
|
|
struct libinput_device *device)
|
|
|
|
|
{
|
|
|
|
|
InputInfoPtr pInfo = dev->public.devicePrivate;
|
|
|
|
|
|
|
|
|
|
if (!subdevice_has_capabilities(dev, CAP_POINTER))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (libinput_device_config_scroll_set_method(device,
|
|
|
|
|
driver_data->options.scroll_method) != LIBINPUT_CONFIG_STATUS_SUCCESS) {
|
|
|
|
|
@@ -587,12 +672,25 @@ LibinputApplyConfig(DeviceIntPtr dev)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (libinput_device_config_scroll_get_methods(device) & LIBINPUT_CONFIG_SCROLL_ON_BUTTON_DOWN) {
|
|
|
|
|
unsigned int scroll_button;
|
|
|
|
|
|
|
|
|
|
scroll_button = btn_xorg2linux(driver_data->options.scroll_button);
|
|
|
|
|
if (libinput_device_config_scroll_set_button(device, scroll_button) != LIBINPUT_CONFIG_STATUS_SUCCESS)
|
|
|
|
|
xf86IDrvMsg(pInfo, X_ERROR,
|
|
|
|
|
"Failed to set ScrollButton to %u\n",
|
|
|
|
|
driver_data->options.scroll_button);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
LibinputApplyConfigClickMethod(DeviceIntPtr dev,
|
|
|
|
|
struct xf86libinput *driver_data,
|
|
|
|
|
struct libinput_device *device)
|
|
|
|
|
{
|
|
|
|
|
InputInfoPtr pInfo = dev->public.devicePrivate;
|
|
|
|
|
|
|
|
|
|
if (!subdevice_has_capabilities(dev, CAP_POINTER))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (libinput_device_config_click_set_method(device,
|
|
|
|
|
driver_data->options.click_method) != LIBINPUT_CONFIG_STATUS_SUCCESS) {
|
|
|
|
|
@@ -610,6 +708,17 @@ LibinputApplyConfig(DeviceIntPtr dev)
|
|
|
|
|
"Failed to set click method to %s\n",
|
|
|
|
|
method);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
LibinputApplyConfigMiddleEmulation(DeviceIntPtr dev,
|
|
|
|
|
struct xf86libinput *driver_data,
|
|
|
|
|
struct libinput_device *device)
|
|
|
|
|
{
|
|
|
|
|
InputInfoPtr pInfo = dev->public.devicePrivate;
|
|
|
|
|
|
|
|
|
|
if (!subdevice_has_capabilities(dev, CAP_POINTER))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (libinput_device_config_middle_emulation_is_available(device) &&
|
|
|
|
|
libinput_device_config_middle_emulation_set_enabled(device,
|
|
|
|
|
@@ -617,6 +726,17 @@ LibinputApplyConfig(DeviceIntPtr dev)
|
|
|
|
|
xf86IDrvMsg(pInfo, X_ERROR,
|
|
|
|
|
"Failed to set MiddleEmulation to %d\n",
|
|
|
|
|
driver_data->options.middle_emulation);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
LibinputApplyConfigDisableWhileTyping(DeviceIntPtr dev,
|
|
|
|
|
struct xf86libinput *driver_data,
|
|
|
|
|
struct libinput_device *device)
|
|
|
|
|
{
|
|
|
|
|
InputInfoPtr pInfo = dev->public.devicePrivate;
|
|
|
|
|
|
|
|
|
|
if (!subdevice_has_capabilities(dev, CAP_POINTER))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (libinput_device_config_dwt_is_available(device) &&
|
|
|
|
|
libinput_device_config_dwt_set_enabled(device,
|
|
|
|
|
@@ -624,13 +744,43 @@ LibinputApplyConfig(DeviceIntPtr dev)
|
|
|
|
|
xf86IDrvMsg(pInfo, X_ERROR,
|
|
|
|
|
"Failed to set DisableWhileTyping to %d\n",
|
|
|
|
|
driver_data->options.disable_while_typing);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
LibinputApplyConfigRotation(DeviceIntPtr dev,
|
|
|
|
|
struct xf86libinput *driver_data,
|
|
|
|
|
struct libinput_device *device)
|
|
|
|
|
{
|
|
|
|
|
InputInfoPtr pInfo = dev->public.devicePrivate;
|
|
|
|
|
|
|
|
|
|
if (!subdevice_has_capabilities(dev, CAP_POINTER))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (libinput_device_config_rotation_is_available(device) &&
|
|
|
|
|
libinput_device_config_rotation_set_angle(device, driver_data->options.rotation_angle) != LIBINPUT_CONFIG_STATUS_SUCCESS)
|
|
|
|
|
xf86IDrvMsg(pInfo, X_ERROR,
|
|
|
|
|
"Failed to set RotationAngle to %.2f\n",
|
|
|
|
|
driver_data->options.rotation_angle);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline void
|
|
|
|
|
LibinputApplyConfig(DeviceIntPtr dev)
|
|
|
|
|
{
|
|
|
|
|
InputInfoPtr pInfo = dev->public.devicePrivate;
|
|
|
|
|
struct xf86libinput *driver_data = pInfo->private;
|
|
|
|
|
struct libinput_device *device = driver_data->shared_device->device;
|
|
|
|
|
|
|
|
|
|
LibinputApplyConfigSendEvents(dev, driver_data, device);
|
|
|
|
|
LibinputApplyConfigNaturalScroll(dev, driver_data, device);
|
|
|
|
|
LibinputApplyConfigAccel(dev, driver_data, device);
|
|
|
|
|
LibinputApplyConfigTap(dev, driver_data, device);
|
|
|
|
|
LibinputApplyConfigCalibration(dev, driver_data, device);
|
|
|
|
|
LibinputApplyConfigLeftHanded(dev, driver_data, device);
|
|
|
|
|
LibinputApplyConfigScrollMethod(dev, driver_data, device);
|
|
|
|
|
LibinputApplyConfigClickMethod(dev, driver_data, device);
|
|
|
|
|
LibinputApplyConfigMiddleEmulation(dev, driver_data, device);
|
|
|
|
|
LibinputApplyConfigDisableWhileTyping(dev, driver_data, device);
|
|
|
|
|
LibinputApplyConfigRotation(dev, driver_data, device);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
@@ -1716,12 +1866,15 @@ static enum event_handling
|
|
|
|
|
xf86libinput_handle_tablet_tip(InputInfoPtr pInfo,
|
|
|
|
|
struct libinput_event_tablet_tool *event)
|
|
|
|
|
{
|
|
|
|
|
DeviceIntPtr pDev = pInfo->dev;
|
|
|
|
|
enum libinput_tablet_tool_tip_state state;
|
|
|
|
|
const BOOL is_absolute = TRUE;
|
|
|
|
|
|
|
|
|
|
if (xf86libinput_tool_queue_event(event))
|
|
|
|
|
return EVENT_QUEUED;
|
|
|
|
|
|
|
|
|
|
xf86libinput_post_tablet_motion(pDev->public.devicePrivate, event);
|
|
|
|
|
|
|
|
|
|
state = libinput_event_tablet_tool_get_tip_state(event);
|
|
|
|
|
|
|
|
|
|
xf86PostButtonEventP(pInfo->dev,
|
|
|
|
|
@@ -4422,6 +4575,9 @@ LibinputInitTapProperty(DeviceIntPtr dev,
|
|
|
|
|
{
|
|
|
|
|
BOOL tap = driver_data->options.tapping;
|
|
|
|
|
|
|
|
|
|
if (!subdevice_has_capabilities(dev, CAP_POINTER))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (libinput_device_config_tap_get_finger_count(device) == 0)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
@@ -4448,6 +4604,9 @@ LibinputInitTapDragProperty(DeviceIntPtr dev,
|
|
|
|
|
{
|
|
|
|
|
BOOL drag = driver_data->options.tap_drag;
|
|
|
|
|
|
|
|
|
|
if (!subdevice_has_capabilities(dev, CAP_POINTER))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (libinput_device_config_tap_get_finger_count(device) == 0)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
@@ -4472,6 +4631,9 @@ LibinputInitTapDragLockProperty(DeviceIntPtr dev,
|
|
|
|
|
{
|
|
|
|
|
BOOL drag_lock = driver_data->options.tap_drag_lock;
|
|
|
|
|
|
|
|
|
|
if (!subdevice_has_capabilities(dev, CAP_POINTER))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (libinput_device_config_tap_get_finger_count(device) == 0)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
@@ -4497,6 +4659,9 @@ LibinputInitTapButtonmapProperty(DeviceIntPtr dev,
|
|
|
|
|
enum libinput_config_tap_button_map map;
|
|
|
|
|
BOOL data[2] = {0};
|
|
|
|
|
|
|
|
|
|
if (!subdevice_has_capabilities(dev, CAP_POINTER))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
map = driver_data->options.tap_button_map;
|
|
|
|
|
|
|
|
|
|
if (libinput_device_config_tap_get_finger_count(device) == 0)
|
|
|
|
|
@@ -4547,6 +4712,9 @@ LibinputInitCalibrationProperty(DeviceIntPtr dev,
|
|
|
|
|
{
|
|
|
|
|
float calibration[9];
|
|
|
|
|
|
|
|
|
|
if (!subdevice_has_capabilities(dev, CAP_POINTER|CAP_TOUCH|CAP_TABLET))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (!libinput_device_config_calibration_has_matrix(device))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
@@ -4584,6 +4752,9 @@ LibinputInitAccelProperty(DeviceIntPtr dev,
|
|
|
|
|
enum libinput_config_accel_profile profile;
|
|
|
|
|
BOOL profiles[2] = {FALSE};
|
|
|
|
|
|
|
|
|
|
if (!subdevice_has_capabilities(dev, CAP_POINTER))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (!libinput_device_config_accel_is_available(device) ||
|
|
|
|
|
driver_data->capabilities & CAP_TABLET)
|
|
|
|
|
return;
|
|
|
|
|
@@ -4671,6 +4842,9 @@ LibinputInitNaturalScrollProperty(DeviceIntPtr dev,
|
|
|
|
|
{
|
|
|
|
|
BOOL natural_scroll = driver_data->options.natural_scrolling;
|
|
|
|
|
|
|
|
|
|
if (!subdevice_has_capabilities(dev, CAP_POINTER))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (!libinput_device_config_scroll_has_natural_scroll(device))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
@@ -4753,6 +4927,9 @@ LibinputInitLeftHandedProperty(DeviceIntPtr dev,
|
|
|
|
|
{
|
|
|
|
|
BOOL left_handed = driver_data->options.left_handed;
|
|
|
|
|
|
|
|
|
|
if (!subdevice_has_capabilities(dev, CAP_POINTER|CAP_TABLET))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (!libinput_device_config_left_handed_is_available(device) ||
|
|
|
|
|
driver_data->capabilities & CAP_TABLET)
|
|
|
|
|
return;
|
|
|
|
|
@@ -4780,6 +4957,9 @@ LibinputInitScrollMethodsProperty(DeviceIntPtr dev,
|
|
|
|
|
enum libinput_config_scroll_method method;
|
|
|
|
|
BOOL methods[3] = {FALSE};
|
|
|
|
|
|
|
|
|
|
if (!subdevice_has_capabilities(dev, CAP_POINTER))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
scroll_methods = libinput_device_config_scroll_get_methods(device);
|
|
|
|
|
if (scroll_methods == LIBINPUT_CONFIG_SCROLL_NO_SCROLL)
|
|
|
|
|
return;
|
|
|
|
|
@@ -4867,6 +5047,9 @@ LibinputInitClickMethodsProperty(DeviceIntPtr dev,
|
|
|
|
|
enum libinput_config_click_method method;
|
|
|
|
|
BOOL methods[2] = {FALSE};
|
|
|
|
|
|
|
|
|
|
if (!subdevice_has_capabilities(dev, CAP_POINTER))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
click_methods = libinput_device_config_click_get_methods(device);
|
|
|
|
|
if (click_methods == LIBINPUT_CONFIG_CLICK_METHOD_NONE)
|
|
|
|
|
return;
|
|
|
|
|
@@ -4935,6 +5118,9 @@ LibinputInitMiddleEmulationProperty(DeviceIntPtr dev,
|
|
|
|
|
{
|
|
|
|
|
BOOL middle = driver_data->options.middle_emulation;
|
|
|
|
|
|
|
|
|
|
if (!subdevice_has_capabilities(dev, CAP_POINTER))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (!libinput_device_config_middle_emulation_is_available(device))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
@@ -4961,6 +5147,9 @@ LibinputInitDisableWhileTypingProperty(DeviceIntPtr dev,
|
|
|
|
|
{
|
|
|
|
|
BOOL dwt = driver_data->options.disable_while_typing;
|
|
|
|
|
|
|
|
|
|
if (!subdevice_has_capabilities(dev, CAP_POINTER))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (!libinput_device_config_dwt_is_available(device))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
@@ -4993,6 +5182,9 @@ LibinputInitModeGroupProperties(DeviceIntPtr dev,
|
|
|
|
|
associations[MAX_BUTTONS] = {0};
|
|
|
|
|
int g, b, r, s;
|
|
|
|
|
|
|
|
|
|
if (!subdevice_has_capabilities(dev, CAP_TABLET_PAD))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (!libinput_device_has_capability(device, LIBINPUT_DEVICE_CAP_TABLET_PAD))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
@@ -5247,17 +5439,17 @@ LibinputInitProperty(DeviceIntPtr dev)
|
|
|
|
|
LibinputInitTapDragProperty(dev, driver_data, device);
|
|
|
|
|
LibinputInitTapDragLockProperty(dev, driver_data, device);
|
|
|
|
|
LibinputInitTapButtonmapProperty(dev, driver_data, device);
|
|
|
|
|
LibinputInitCalibrationProperty(dev, driver_data, device);
|
|
|
|
|
LibinputInitAccelProperty(dev, driver_data, device);
|
|
|
|
|
LibinputInitNaturalScrollProperty(dev, driver_data, device);
|
|
|
|
|
LibinputInitSendEventsProperty(dev, driver_data, device);
|
|
|
|
|
LibinputInitLeftHandedProperty(dev, driver_data, device);
|
|
|
|
|
LibinputInitDisableWhileTypingProperty(dev, driver_data, device);
|
|
|
|
|
LibinputInitScrollMethodsProperty(dev, driver_data, device);
|
|
|
|
|
LibinputInitClickMethodsProperty(dev, driver_data, device);
|
|
|
|
|
LibinputInitMiddleEmulationProperty(dev, driver_data, device);
|
|
|
|
|
LibinputInitDisableWhileTypingProperty(dev, driver_data, device);
|
|
|
|
|
LibinputInitModeGroupProperties(dev, driver_data, device);
|
|
|
|
|
LibinputInitRotationAngleProperty(dev, driver_data, device);
|
|
|
|
|
LibinputInitAccelProperty(dev, driver_data, device);
|
|
|
|
|
LibinputInitCalibrationProperty(dev, driver_data, device);
|
|
|
|
|
LibinputInitLeftHandedProperty(dev, driver_data, device);
|
|
|
|
|
LibinputInitModeGroupProperties(dev, driver_data, device);
|
|
|
|
|
LibinputInitSendEventsProperty(dev, driver_data, device);
|
|
|
|
|
|
|
|
|
|
/* Device node property, read-only */
|
|
|
|
|
device_node = driver_data->path;
|
|
|
|
|
|