Commit 8d4e0357 authored by Peter Hutterer's avatar Peter Hutterer

Add "libinput something Default" properties

A client or xorg.conf setting may change the property but once changed it
cannot be reset by a client to the original state without knowledge about the
device.

Export the various libinput_...get_default() functions as properties.

https://bugs.freedesktop.org/show_bug.cgi?id=89574Signed-off-by: Peter Hutterer's avatarPeter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: 's avatarHans de Goede <hdegoede@redhat.com>
parent 0c5620a2
......@@ -27,15 +27,27 @@
/* Tapping enabled/disabled: BOOL, 1 value */
#define LIBINPUT_PROP_TAP "libinput Tapping Enabled"
/* Tapping default enabled/disabled: BOOL, 1 value, read-only */
#define LIBINPUT_PROP_TAP_DEFAULT "libinput Tapping Enabled Default"
/* Calibration matrix: FLOAT, 9 values of a 3x3 matrix, in rows */
#define LIBINPUT_PROP_CALIBRATION "libinput Calibration Matrix"
/* Calibration matrix: FLOAT, 9 values of a 3x3 matrix, in rows, read-only*/
#define LIBINPUT_PROP_CALIBRATION_DEFAULT "libinput Calibration Matrix Default"
/* Pointer accel speed: FLOAT, 1 value, 32 bit */
#define LIBINPUT_PROP_ACCEL "libinput Accel Speed"
/* Pointer accel speed: FLOAT, 1 value, 32 bit, read-only*/
#define LIBINPUT_PROP_ACCEL_DEFAULT "libinput Accel Speed Default"
/* Natural scrolling: BOOL, 1 value */
#define LIBINPUT_PROP_NATURAL_SCROLL "libinput Natural Scrolling Enabled"
/* Natural scrolling: BOOL, 1 value, read-only */
#define LIBINPUT_PROP_NATURAL_SCROLL_DEFAULT "libinput Natural Scrolling Enabled Default"
/* Send-events mode: BOOL read-only, 2 values in order disabled,
disabled-on-external-mouse */
#define LIBINPUT_PROP_SENDEVENTS_AVAILABLE "libinput Send Events Modes Available"
......@@ -44,9 +56,16 @@
disabled-on-external-mouse */
#define LIBINPUT_PROP_SENDEVENTS_ENABLED "libinput Send Events Mode Enabled"
/* Send-events mode: BOOL, 2 values in order disabled,
disabled-on-external-mouse, read-only */
#define LIBINPUT_PROP_SENDEVENTS_ENABLED_DEFAULT "libinput Send Events Mode Enabled Default"
/* Left-handed enabled/disabled: BOOL, 1 value */
#define LIBINPUT_PROP_LEFT_HANDED "libinput Left Handed Enabled"
/* Left-handed enabled/disabled: BOOL, 1 value, read-only */
#define LIBINPUT_PROP_LEFT_HANDED_DEFAULT "libinput Left Handed Enabled Default"
/* Scroll method: BOOL read-only, 3 values in order 2fg, edge, button.
shows available scroll methods */
#define LIBINPUT_PROP_SCROLL_METHODS_AVAILABLE "libinput Scroll Methods Available"
......@@ -55,9 +74,16 @@
only one is enabled at a time at max */
#define LIBINPUT_PROP_SCROLL_METHOD_ENABLED "libinput Scroll Method Enabled"
/* Scroll method: BOOL, 3 values in order 2fg, edge, button
only one is enabled at a time at max, read-only */
#define LIBINPUT_PROP_SCROLL_METHOD_ENABLED_DEFAULT "libinput Scroll Method Enabled Default"
/* Scroll button for button scrolling: 32-bit int, 1 value */
#define LIBINPUT_PROP_SCROLL_BUTTON "libinput Button Scrolling Button"
/* Scroll button for button scrolling: 32-bit int, 1 value, read-only */
#define LIBINPUT_PROP_SCROLL_BUTTON_DEFAULT "libinput Button Scrolling Button Default"
/* Click method: BOOL read-only, 2 values in order buttonareas, clickfinger
shows available click methods */
#define LIBINPUT_PROP_CLICK_METHODS_AVAILABLE "libinput Click Methods Available"
......@@ -66,4 +92,7 @@
only one enabled at a time at max */
#define LIBINPUT_PROP_CLICK_METHOD_ENABLED "libinput Click Method Enabled"
/* Click method: BOOL, 2 values in order buttonareas, clickfinger
only one enabled at a time at max, read-only */
#define LIBINPUT_PROP_CLICK_METHOD_ENABLED_DEFAULT "libinput Click Method Enabled Default"
#endif /* _LIBINPUT_PROPERTIES_H_ */
......@@ -151,6 +151,10 @@ Indicates which click methods are available on this device.
.BI "libinput Click Methods Enabled"
2 boolean values (8 bit, 0 or 1), in order "buttonareas", "clickfinger".
Indicates which click methods are enabled on this device.
.PP
The above properties have a
.BI "libinput <property name> Default"
equivalent that indicates the default value for this setting on this device.
.SH AUTHORS
Peter Hutterer
......
......@@ -1327,17 +1327,26 @@ _X_EXPORT XF86ModuleData libinputModuleData = {
/* libinput-specific properties */
static Atom prop_tap;
static Atom prop_tap_default;
static Atom prop_calibration;
static Atom prop_calibration_default;
static Atom prop_accel;
static Atom prop_accel_default;
static Atom prop_natural_scroll;
static Atom prop_natural_scroll_default;
static Atom prop_sendevents_available;
static Atom prop_sendevents_enabled;
static Atom prop_sendevents_default;
static Atom prop_left_handed;
static Atom prop_left_handed_default;
static Atom prop_scroll_methods_available;
static Atom prop_scroll_method_enabled;
static Atom prop_scroll_method_default;
static Atom prop_scroll_button;
static Atom prop_scroll_button_default;
static Atom prop_click_methods_available;
static Atom prop_click_method_enabled;
static Atom prop_click_method_default;
/* general properties */
static Atom prop_float;
......@@ -1716,7 +1725,16 @@ LibinputSetProperty(DeviceIntPtr dev, Atom atom, XIPropertyValuePtr val,
return BadAccess; /* read-only */
else if (atom == prop_click_method_enabled)
rc = LibinputSetPropertyClickMethod(dev, atom, val, checkonly);
else if (atom == prop_device || atom == prop_product_id)
else if (atom == prop_device || atom == prop_product_id ||
atom == prop_tap_default ||
atom == prop_calibration_default ||
atom == prop_accel_default ||
atom == prop_natural_scroll_default ||
atom == prop_sendevents_default ||
atom == prop_left_handed_default ||
atom == prop_scroll_method_default ||
atom == prop_scroll_button_default ||
atom == prop_click_method_default)
return BadAccess; /* read-only */
else
return Success;
......@@ -1765,6 +1783,14 @@ LibinputInitTapProperty(DeviceIntPtr dev,
8,
1,
&tap);
if (!prop_tap)
return;
tap = libinput_device_config_tap_get_default_enabled(device);
prop_tap_default = LibinputMakeProperty(dev,
LIBINPUT_PROP_TAP_DEFAULT,
XA_INTEGER, 8,
1, &tap);
}
static void
......@@ -1789,6 +1815,16 @@ LibinputInitCalibrationProperty(DeviceIntPtr dev,
LIBINPUT_PROP_CALIBRATION,
prop_float, 32,
9, calibration);
if (!prop_calibration)
return;
libinput_device_config_calibration_get_default_matrix(device,
calibration);
prop_calibration_default = LibinputMakeProperty(dev,
LIBINPUT_PROP_CALIBRATION_DEFAULT,
prop_float, 32,
9, calibration);
}
static void
......@@ -1805,6 +1841,14 @@ LibinputInitAccelProperty(DeviceIntPtr dev,
LIBINPUT_PROP_ACCEL,
prop_float, 32,
1, &speed);
if (!prop_accel)
return;
speed = libinput_device_config_accel_get_default_speed(device);
prop_accel_default = LibinputMakeProperty(dev,
LIBINPUT_PROP_ACCEL_DEFAULT,
prop_float, 32,
1, &speed);
}
static void
......@@ -1821,6 +1865,14 @@ LibinputInitNaturalScrollProperty(DeviceIntPtr dev,
LIBINPUT_PROP_NATURAL_SCROLL,
XA_INTEGER, 8,
1, &natural_scroll);
if (!prop_natural_scroll)
return;
natural_scroll = libinput_device_config_scroll_get_default_natural_scroll_enabled(device);
prop_natural_scroll_default = LibinputMakeProperty(dev,
LIBINPUT_PROP_NATURAL_SCROLL_DEFAULT,
XA_INTEGER, 8,
1, &natural_scroll);
}
static void
......@@ -1864,6 +1916,21 @@ LibinputInitSendEventsProperty(DeviceIntPtr dev,
LIBINPUT_PROP_SENDEVENTS_ENABLED,
XA_INTEGER, 8,
2, modes);
if (!prop_sendevents_enabled)
return;
memset(modes, 0, sizeof(modes));
sendevent_modes = libinput_device_config_send_events_get_default_mode(device);
if (sendevent_modes & LIBINPUT_CONFIG_SEND_EVENTS_DISABLED)
modes[0] = TRUE;
if (sendevent_modes & LIBINPUT_CONFIG_SEND_EVENTS_DISABLED_ON_EXTERNAL_MOUSE)
modes[1] = TRUE;
prop_sendevents_default = LibinputMakeProperty(dev,
LIBINPUT_PROP_SENDEVENTS_ENABLED_DEFAULT,
XA_INTEGER, 8,
2, modes);
}
static void
......@@ -1880,6 +1947,14 @@ LibinputInitLeftHandedProperty(DeviceIntPtr dev,
LIBINPUT_PROP_LEFT_HANDED,
XA_INTEGER, 8,
1, &left_handed);
if (!prop_left_handed)
return;
left_handed = libinput_device_config_left_handed_get_default(device);
prop_left_handed_default = LibinputMakeProperty(dev,
LIBINPUT_PROP_LEFT_HANDED_DEFAULT,
XA_INTEGER, 8,
1, &left_handed);
}
static void
......@@ -1935,6 +2010,22 @@ LibinputInitScrollMethodsProperty(DeviceIntPtr dev,
if (!prop_scroll_method_enabled)
return;
scroll_methods = libinput_device_config_scroll_get_default_method(device);
if (scroll_methods == LIBINPUT_CONFIG_SCROLL_NO_SCROLL)
return;
if (scroll_methods & LIBINPUT_CONFIG_SCROLL_2FG)
methods[0] = TRUE;
if (scroll_methods & LIBINPUT_CONFIG_SCROLL_EDGE)
methods[1] = TRUE;
if (scroll_methods & LIBINPUT_CONFIG_SCROLL_ON_BUTTON_DOWN)
methods[2] = TRUE;
prop_scroll_method_default = LibinputMakeProperty(dev,
LIBINPUT_PROP_SCROLL_METHOD_ENABLED_DEFAULT,
XA_INTEGER, 8,
ARRAY_SIZE(methods),
&methods);
/* Scroll button */
if (libinput_device_config_scroll_get_methods(device) &
LIBINPUT_CONFIG_SCROLL_ON_BUTTON_DOWN) {
......@@ -1944,6 +2035,14 @@ LibinputInitScrollMethodsProperty(DeviceIntPtr dev,
LIBINPUT_PROP_SCROLL_BUTTON,
XA_CARDINAL, 32,
1, &scroll_button);
if (!prop_scroll_button)
return;
scroll_button = libinput_device_config_scroll_get_default_button(device);
prop_scroll_button_default = LibinputMakeProperty(dev,
LIBINPUT_PROP_SCROLL_BUTTON_DEFAULT,
XA_CARDINAL, 32,
1, &scroll_button);
}
}
......@@ -1992,6 +2091,29 @@ LibinputInitClickMethodsProperty(DeviceIntPtr dev,
XA_INTEGER, 8,
ARRAY_SIZE(methods),
&methods);
if (!prop_click_method_enabled)
return;
memset(methods, 0, sizeof(methods));
method = libinput_device_config_click_get_default_method(device);
switch(method) {
case LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS:
methods[0] = TRUE;
break;
case LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER:
methods[1] = TRUE;
break;
default:
break;
}
prop_click_method_default = LibinputMakeProperty(dev,
LIBINPUT_PROP_CLICK_METHOD_ENABLED_DEFAULT,
XA_INTEGER, 8,
ARRAY_SIZE(methods),
&methods);
}
static void
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment