mirror of
https://github.com/X11Libre/xf86-input-libinput.git
synced 2026-03-24 17:44:05 +00:00
Compare commits
13 Commits
submit/uti
...
xlibre-xf8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dcfbe775cd | ||
|
|
f86600edd0 | ||
|
|
771cada821 | ||
|
|
d07bc60926 | ||
|
|
4f163b3f73 | ||
|
|
112263280f | ||
|
|
5d27c689bf | ||
|
|
8c2a8fa56c | ||
|
|
ada1d2ed6c | ||
|
|
0f6cc09321 | ||
|
|
733692c9ce | ||
|
|
e0c4e1afc4 | ||
|
|
577d0600c4 |
26
README.md
26
README.md
@@ -2,7 +2,8 @@ xf86-input-libinput - a libinput-based X driver
|
||||
===============================================
|
||||
|
||||
The official repository for this driver is
|
||||
https://gitlab.freedesktop.org/xorg/driver/xf86-input-libinput
|
||||
|
||||
https://github.com/X11Libre/xf86-input-evdev
|
||||
|
||||
This is an X driver based on libinput. It is a thin wrapper around libinput,
|
||||
so while it does provide all features that libinput supports it does little
|
||||
@@ -12,19 +13,6 @@ beyond.
|
||||
usable input devices in your X session. Use with caution.***
|
||||
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
To build, you'll need the X.Org X server SDK (check your distribution for a
|
||||
xorg-x11-server-devel package or similar) and libinput (check your
|
||||
distribution for libinput-devel or similar).
|
||||
|
||||
To get libinput from source, see:
|
||||
https://www.freedesktop.org/wiki/Software/libinput/
|
||||
|
||||
To build the X server from source:
|
||||
https://www.x.org/wiki/Building_the_X_Window_System/
|
||||
|
||||
Building
|
||||
--------
|
||||
|
||||
@@ -43,13 +31,3 @@ Install the default configuration file:
|
||||
cp conf/99-libinput.conf /etc/X11/xorg.conf.d/
|
||||
|
||||
This will assign this driver to *all* devices. Use with caution.
|
||||
|
||||
|
||||
Bugs
|
||||
----
|
||||
|
||||
Bugs in libinput go to the Issues section of the libinput gitlab project:
|
||||
https://gitlab.freedesktop.org/libinput/libinput/issues
|
||||
|
||||
Bugs in this driver go to the Issues section of its gitlab project:
|
||||
https://gitlab.freedesktop.org/xorg/driver/xf86-input-libinput/issues
|
||||
|
||||
21
configure.ac
21
configure.ac
@@ -22,10 +22,10 @@
|
||||
|
||||
# Initialize Autoconf
|
||||
AC_PREREQ([2.60])
|
||||
AC_INIT([xf86-input-libinput],
|
||||
[1.5.0],
|
||||
[https://gitlab.freedesktop.org/xorg/driver/xf86-input-libinput/issues],
|
||||
[xf86-input-libinput])
|
||||
AC_INIT([xlibre-xf86-input-libinput],
|
||||
[1.5.2],
|
||||
[https://github.com/X11Libre/xf86-input-libinput/issues],
|
||||
[xlibre-xf86-input-libinput])
|
||||
AC_CONFIG_SRCDIR([Makefile.am])
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
AC_CONFIG_AUX_DIR(.)
|
||||
@@ -43,6 +43,8 @@ m4_ifndef([XORG_MACROS_VERSION],
|
||||
XORG_MACROS_VERSION(1.8)
|
||||
XORG_DEFAULT_OPTIONS
|
||||
|
||||
CFLAGS="$CFLAGS -Wno-declaration-after-statement"
|
||||
|
||||
# Obtain compiler/linker options from server and required extensions
|
||||
PKG_CHECK_MODULES(XORG, [xorg-server >= 1.19] xproto [inputproto >= 2.2])
|
||||
PKG_CHECK_MODULES(LIBINPUT, [libinput >= 1.11.0])
|
||||
@@ -111,6 +113,17 @@ AC_LINK_IFELSE(
|
||||
[AC_MSG_RESULT([no])
|
||||
[libinput_have_clickfinger_button_map=no]])
|
||||
|
||||
AC_MSG_CHECKING([if libinput_plugin_system_load is available])
|
||||
AC_LINK_IFELSE(
|
||||
[AC_LANG_PROGRAM([[#include <libinput.h>]],
|
||||
[[libinput_plugin_system_load_plugins(NULL, 0)]])],
|
||||
[AC_MSG_RESULT([yes])
|
||||
AC_DEFINE(HAVE_LIBINPUT_PLUGINS, [1],
|
||||
[libinput_plugin_system_load_plugins() is available])
|
||||
[libinput_have_plugin_system=yes]],
|
||||
[AC_MSG_RESULT([no])
|
||||
[libinput_have_plugin_system=no]])
|
||||
|
||||
LIBS=$OLD_LIBS
|
||||
CFLAGS=$OLD_CFLAGS
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ If you are looking for the library documentation, go to
|
||||
|
||||
.SH DESCRIPTION
|
||||
.B libinput
|
||||
is an Xorg input driver based on libinput.
|
||||
is an XLibre input driver based on libinput.
|
||||
It therefore supports all input devices that libinput can handle, including
|
||||
most mice, keyboards, tablets and touchscreens.
|
||||
.PP
|
||||
@@ -178,6 +178,15 @@ Enables left-handed button orientation, i.e. swapping left and right buttons.
|
||||
Enables middle button emulation.
|
||||
When enabled, pressing the left and right
|
||||
buttons simultaneously produces a middle mouse button click.
|
||||
A synonym
|
||||
.IP
|
||||
.BI "Option \*qEmulate3Buttons\*q \*q" bool \*q
|
||||
.IP
|
||||
is preserved for compatibility with
|
||||
.B evdev
|
||||
driver, with
|
||||
.BI "\*qMiddleEmulation\*q
|
||||
having preference if both are set.
|
||||
.TP 7
|
||||
.BI "Option \*qNaturalScrolling\*q \*q" bool \*q
|
||||
Enables or disables natural scrolling behavior.
|
||||
@@ -468,13 +477,13 @@ button mapping of
|
||||
.B "\*q3 2 1 ...\*q"
|
||||
On systems using the
|
||||
.B libinput
|
||||
Xorg input driver it is recommended to use the
|
||||
XLibre input driver it is recommended to use the
|
||||
.B LeftHanded
|
||||
option instead.
|
||||
.PP
|
||||
The
|
||||
.B libinput
|
||||
Xorg input driver does not use the button mapping after setup.
|
||||
XLibre input driver does not use the button mapping after setup.
|
||||
Use
|
||||
.BR XSetPointerMapping (3)
|
||||
to modify the button mapping at runtime.
|
||||
@@ -597,7 +606,7 @@ appropriate \fBMatch*\fR statement in the
|
||||
.SH AUTHORS
|
||||
Peter Hutterer
|
||||
.SH "SEE ALSO"
|
||||
.BR Xorg (1),
|
||||
.BR XLibre (1),
|
||||
.BR xorg.conf (5),
|
||||
.BR Xserver (1),
|
||||
.BR X (7)
|
||||
|
||||
@@ -65,9 +65,13 @@ if cc.has_function('libinput_device_config_click_set_clickfinger_button_map',
|
||||
dependencies: dep_libinput)
|
||||
config_h.set('HAVE_LIBINPUT_CLICKFINGER_BUTTON_MAP', 1)
|
||||
endif
|
||||
if cc.has_header_symbol('libinput.h', 'LIBINPUT_LED_COMPOSE')
|
||||
if cc.has_header_symbol('libinput.h', 'LIBINPUT_LED_COMPOSE',
|
||||
dependencies: dep_libinput)
|
||||
config_h.set('HAVE_LIBINPUT_COMPOSE_AND_KANA', 1)
|
||||
endif
|
||||
if cc.has_function('libinput_plugin_system_load_plugins', dependencies: dep_libinput)
|
||||
config_h.set('HAVE_LIBINPUT_PLUGINS', 1)
|
||||
endif
|
||||
|
||||
dir_headers = get_option('sdkdir')
|
||||
if dir_headers == ''
|
||||
|
||||
@@ -122,7 +122,9 @@ strv_from_string(const char *in, const char *separators, size_t *num_elements)
|
||||
}
|
||||
|
||||
size_t strv_len = nelems + 1; /* NULL-terminated */
|
||||
char **strv = zalloc(strv_len * sizeof *strv);
|
||||
char **strv = calloc(strv_len, sizeof(*strv));
|
||||
if (!strv)
|
||||
return NULL;
|
||||
|
||||
size_t idx = 0;
|
||||
const char *word;
|
||||
|
||||
@@ -253,7 +253,10 @@ double_array_from_string(const char *in,
|
||||
if(!strv)
|
||||
return result;
|
||||
|
||||
double *numv = zalloc(sizeof(double) * nelem);
|
||||
double *numv = calloc(nelem, sizeof(double));
|
||||
if (!numv)
|
||||
goto out;
|
||||
|
||||
for (size_t idx = 0; idx < nelem; idx++) {
|
||||
double val;
|
||||
if (!safe_atod(strv[idx], &val))
|
||||
@@ -390,31 +393,3 @@ safe_basename(const char *filename);
|
||||
|
||||
char *
|
||||
trunkname(const char *filename);
|
||||
|
||||
/**
|
||||
* Return a copy of str with all % converted to %% to make the string
|
||||
* acceptable as printf format.
|
||||
*/
|
||||
static inline char *
|
||||
str_sanitize(const char *str)
|
||||
{
|
||||
if (!str)
|
||||
return NULL;
|
||||
|
||||
if (!strchr(str, '%'))
|
||||
return strdup(str);
|
||||
|
||||
size_t slen = min(strlen(str), 512);
|
||||
char *sanitized = zalloc(2 * slen + 1);
|
||||
const char *src = str;
|
||||
char *dst = sanitized;
|
||||
|
||||
for (size_t i = 0; i < slen; i++) {
|
||||
if (*src == '%')
|
||||
*dst++ = '%';
|
||||
*dst++ = *src++;
|
||||
}
|
||||
*dst = '\0';
|
||||
|
||||
return sanitized;
|
||||
}
|
||||
|
||||
@@ -141,6 +141,10 @@ struct accel_points {
|
||||
};
|
||||
#endif
|
||||
|
||||
struct xf86libinput_pressure_range {
|
||||
float min, max;
|
||||
};
|
||||
|
||||
struct xf86libinput {
|
||||
InputInfoPtr pInfo;
|
||||
char *path;
|
||||
@@ -199,9 +203,7 @@ struct xf86libinput {
|
||||
|
||||
float rotation_angle;
|
||||
struct bezier_control_point pressurecurve[4];
|
||||
struct range {
|
||||
float min, max;
|
||||
} pressure_range;
|
||||
struct xf86libinput_pressure_range pressure_range;
|
||||
struct ratio {
|
||||
int x, y;
|
||||
} area;
|
||||
@@ -467,7 +469,7 @@ xf86libinput_set_pressurecurve(struct xf86libinput *driver_data,
|
||||
|
||||
static inline bool
|
||||
xf86libinput_set_pressure_range(struct xf86libinput *driver_data,
|
||||
const struct range *rangeopt)
|
||||
const struct xf86libinput_pressure_range *rangeopt)
|
||||
{
|
||||
#if HAVE_LIBINPUT_PRESSURE_RANGE
|
||||
struct libinput_tablet_tool *tool = driver_data->tablet_tool;
|
||||
@@ -939,7 +941,7 @@ LibinputApplyConfigPressureRange(DeviceIntPtr dev,
|
||||
#if HAVE_LIBINPUT_PRESSURE_RANGE
|
||||
InputInfoPtr pInfo = dev->public.devicePrivate;
|
||||
struct libinput_tablet_tool *tool = driver_data->tablet_tool;
|
||||
struct range *rangeopt = &driver_data->options.pressure_range;
|
||||
struct xf86libinput_pressure_range *rangeopt = &driver_data->options.pressure_range;
|
||||
|
||||
if (!subdevice_has_capabilities(dev, CAP_TABLET_TOOL))
|
||||
return;
|
||||
@@ -2739,6 +2741,20 @@ xf86libinput_handle_event(struct libinput_event *event)
|
||||
break;
|
||||
case LIBINPUT_EVENT_SWITCH_TOGGLE:
|
||||
break;
|
||||
|
||||
/* new libinput events we don't handle yet */
|
||||
#ifdef LIBINPUT_EVENT_GESTURE_HOLD_BEGIN
|
||||
case LIBINPUT_EVENT_GESTURE_HOLD_BEGIN:
|
||||
break;
|
||||
#endif
|
||||
#ifdef LIBINPUT_EVENT_GESTURE_HOLD_END
|
||||
case LIBINPUT_EVENT_GESTURE_HOLD_END:
|
||||
break;
|
||||
#endif
|
||||
#ifdef LIBINPUT_EVENT_TABLET_PAD_KEY
|
||||
case LIBINPUT_EVENT_TABLET_PAD_KEY:
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
out:
|
||||
@@ -3490,13 +3506,17 @@ static inline BOOL
|
||||
xf86libinput_parse_middleemulation_option(InputInfoPtr pInfo,
|
||||
struct libinput_device *device)
|
||||
{
|
||||
BOOL enabled;
|
||||
int enabled;
|
||||
|
||||
if (!libinput_device_config_middle_emulation_is_available(device))
|
||||
return FALSE;
|
||||
|
||||
enabled = xf86SetBoolOption(pInfo->options,
|
||||
"MiddleEmulation",
|
||||
-1); /* returns -1 if the option has not been set */
|
||||
if (enabled == -1)
|
||||
enabled = xf86SetBoolOption(pInfo->options,
|
||||
"Emulate3Buttons",
|
||||
libinput_device_config_middle_emulation_get_default_enabled(device));
|
||||
if (libinput_device_config_middle_emulation_set_enabled(device, enabled) !=
|
||||
LIBINPUT_CONFIG_STATUS_SUCCESS) {
|
||||
@@ -3685,7 +3705,7 @@ out:
|
||||
static void
|
||||
xf86libinput_parse_pressure_range_option(InputInfoPtr pInfo,
|
||||
struct xf86libinput *driver_data,
|
||||
struct range *rangeopt)
|
||||
struct xf86libinput_pressure_range *rangeopt)
|
||||
{
|
||||
#if HAVE_LIBINPUT_PRESSURE_RANGE
|
||||
struct libinput_tablet_tool *tool = driver_data->tablet_tool;
|
||||
@@ -3874,6 +3894,10 @@ xf86libinput_init_driver_context(void)
|
||||
/* we want all msgs, let the server filter */
|
||||
libinput_log_set_priority(driver_context.libinput,
|
||||
LIBINPUT_LOG_PRIORITY_DEBUG);
|
||||
#if HAVE_LIBINPUT_PLUGINS
|
||||
libinput_plugin_system_append_default_paths(driver_context.libinput);
|
||||
libinput_plugin_system_load_plugins(driver_context.libinput, LIBINPUT_PLUGIN_SYSTEM_FLAG_NONE);
|
||||
#endif
|
||||
} else {
|
||||
libinput_ref(driver_context.libinput);
|
||||
}
|
||||
@@ -5384,7 +5408,7 @@ LibinputSetPropertyPressureRange(DeviceIntPtr dev,
|
||||
InputInfoPtr pInfo = dev->public.devicePrivate;
|
||||
struct xf86libinput *driver_data = pInfo->private;
|
||||
float *vals;
|
||||
struct range rangeopt = { 0.0, 1.0 };
|
||||
struct xf86libinput_pressure_range rangeopt = { 0.0, 1.0 };
|
||||
|
||||
if (val->format != 32 || val->size != 2 || val->type != prop_float)
|
||||
return BadMatch;
|
||||
@@ -5642,7 +5666,8 @@ LibinputInitTapProperty(DeviceIntPtr dev,
|
||||
struct xf86libinput *driver_data,
|
||||
struct libinput_device *device)
|
||||
{
|
||||
BOOL tap = driver_data->options.tapping;
|
||||
// By default tapping property config is true
|
||||
BOOL tap = driver_data->options.tapping ? driver_data->options.tapping : TRUE;
|
||||
|
||||
if (!subdevice_has_capabilities(dev, CAP_POINTER))
|
||||
return;
|
||||
@@ -6663,7 +6688,7 @@ LibinputInitPressureRangeProperty(DeviceIntPtr dev,
|
||||
{
|
||||
#if HAVE_LIBINPUT_PRESSURE_RANGE
|
||||
struct libinput_tablet_tool *tool = driver_data->tablet_tool;
|
||||
const struct range *rangeopt = &driver_data->options.pressure_range;
|
||||
const struct xf86libinput_pressure_range *rangeopt = &driver_data->options.pressure_range;
|
||||
float data[2] = {
|
||||
rangeopt->min,
|
||||
rangeopt->max,
|
||||
|
||||
Reference in New Issue
Block a user