configure.ac | 4 debian/changelog | 7 + debian/control | 4 include/libinput-properties.h | 6 + man/libinput.man | 8 + src/xf86libinput.c | 177 ++++++++++++++++++++++++++++++++++++++---- 6 files changed, 187 insertions(+), 19 deletions(-)
New commits: commit 8b32ee63fa2ce1e285a9fb5a18ef2498fd43a2fa Author: Timo Aaltonen <tjaal...@debian.org> Date: Sat Feb 27 10:04:57 2016 +0200 release to unstable diff --git a/debian/changelog b/debian/changelog index 3ac0dff..74d7f1c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,9 +1,9 @@ -xserver-xorg-input-libinput (0.17.0-1) UNRELEASED; urgency=medium +xserver-xorg-input-libinput (0.17.0-1) unstable; urgency=medium * New upstream release. * control: Update Vcs fields to use https. - -- Timo Aaltonen <tjaal...@debian.org> Sat, 27 Feb 2016 09:57:32 +0200 + -- Timo Aaltonen <tjaal...@debian.org> Sat, 27 Feb 2016 10:03:43 +0200 xserver-xorg-input-libinput (0.16.0-1) unstable; urgency=medium commit f8de28e556d771e90139c10d54f395cb319b710a Author: Timo Aaltonen <tjaal...@debian.org> Date: Sat Feb 27 10:00:54 2016 +0200 control: Update Vcs fields to use https. diff --git a/debian/changelog b/debian/changelog index 1ab3369..3ac0dff 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +xserver-xorg-input-libinput (0.17.0-1) UNRELEASED; urgency=medium + + * New upstream release. + * control: Update Vcs fields to use https. + + -- Timo Aaltonen <tjaal...@debian.org> Sat, 27 Feb 2016 09:57:32 +0200 + xserver-xorg-input-libinput (0.16.0-1) unstable; urgency=medium * New upstream release. diff --git a/debian/control b/debian/control index 4944583..6869b8f 100644 --- a/debian/control +++ b/debian/control @@ -15,8 +15,8 @@ Build-Depends: xserver-xorg-dev (>= 2:1.15.99), xutils-dev, Standards-Version: 3.9.6 -Vcs-Git: git://anonscm.debian.org/pkg-xorg/driver/xserver-xorg-input-libinput.git -Vcs-Browser: http://anonscm.debian.org/cgit/pkg-xorg/driver/xserver-xorg-input-libinput.git +Vcs-Git: https://anonscm.debian.org/pkg-xorg/driver/xserver-xorg-input-libinput.git +Vcs-Browser: https://anonscm.debian.org/cgit/pkg-xorg/driver/xserver-xorg-input-libinput.git Package: xserver-xorg-input-libinput Architecture: linux-any commit 8136113139dd2a27fcfa4552da89aa110bc8fbe3 Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Fri Feb 26 15:57:48 2016 +1000 xf86-input-libinput 0.17.0 Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> diff --git a/configure.ac b/configure.ac index 6fc95e3..cdb8aed 100644 --- a/configure.ac +++ b/configure.ac @@ -23,7 +23,7 @@ # Initialize Autoconf AC_PREREQ([2.60]) AC_INIT([xf86-input-libinput], - [0.16.0], + [0.17.0], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [xf86-input-libinput]) AC_CONFIG_SRCDIR([Makefile.am]) commit 202eb68dc061510d57900d29b3a76fe2ed811998 Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Thu Jan 28 15:02:54 2016 +1000 Fix compiler warnings about missing tablet event cases Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> diff --git a/src/xf86libinput.c b/src/xf86libinput.c index b520b26..32bc9f8 100644 --- a/src/xf86libinput.c +++ b/src/xf86libinput.c @@ -1131,6 +1131,11 @@ xf86libinput_handle_event(struct libinput_event *event) case LIBINPUT_EVENT_GESTURE_PINCH_UPDATE: case LIBINPUT_EVENT_GESTURE_PINCH_END: break; + case LIBINPUT_EVENT_TABLET_TOOL_AXIS: + case LIBINPUT_EVENT_TABLET_TOOL_BUTTON: + case LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY: + case LIBINPUT_EVENT_TABLET_TOOL_TIP: + break; } } commit e8f5394b0734db41abd15ab72457aea99c25d9ab Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Wed Jan 27 11:04:40 2016 +1000 Add property/option for enabling/disabling tap-n-drag Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> Reviewed-by: Hans de Goede <hdego...@redhat.com> diff --git a/configure.ac b/configure.ac index 67bebdc..6fc95e3 100644 --- a/configure.ac +++ b/configure.ac @@ -45,7 +45,7 @@ XORG_DEFAULT_OPTIONS # Obtain compiler/linker options from server and required extensions PKG_CHECK_MODULES(XORG, [xorg-server >= 1.10] xproto [inputproto >= 2.2]) -PKG_CHECK_MODULES(LIBINPUT, [libinput >= 1.0.901]) +PKG_CHECK_MODULES(LIBINPUT, [libinput >= 1.1.901]) # Define a configure option for an alternate input module directory AC_ARG_WITH(xorg-module-dir, diff --git a/include/libinput-properties.h b/include/libinput-properties.h index 098ce48..d117729 100644 --- a/include/libinput-properties.h +++ b/include/libinput-properties.h @@ -30,6 +30,12 @@ /* Tapping default enabled/disabled: BOOL, 1 value, read-only */ #define LIBINPUT_PROP_TAP_DEFAULT "libinput Tapping Enabled Default" +/* Tap drag enabled/disabled: BOOL, 1 value */ +#define LIBINPUT_PROP_TAP_DRAG "libinput Tapping Drag Enabled" + +/* Tap drag default enabled/disabled: BOOL, 1 value */ +#define LIBINPUT_PROP_TAP_DRAG_DEFAULT "libinput Tapping Drag Enabled Default" + /* Tap drag lock enabled/disabled: BOOL, 1 value */ #define LIBINPUT_PROP_TAP_DRAG_LOCK "libinput Tapping Drag Lock Enabled" diff --git a/man/libinput.man b/man/libinput.man index b6f476e..43beda7 100644 --- a/man/libinput.man +++ b/man/libinput.man @@ -129,6 +129,14 @@ mouse is connected". .BI "Option \*qTapping\*q \*q" bool \*q Enables or disables tap-to-click behavior. .TP 7 +.BI "Option \*qTappingDrag\*q \*q" bool \*q +Enables or disables drag during tapping behavior ("tap-and-drag"). When +enabled, a tap followed by a finger held down causes a single button down +only, all motions of that finger thus translate into dragging motion. +Tap-and-drag requires option +.B Tapping +to be enabled. +.TP 7 .BI "Option \*qTappingDragLock\*q \*q" bool \*q Enables or disables drag lock during tapping behavior. When enabled, a finger up during tap-and-drag will not immediately release the button. If diff --git a/src/xf86libinput.c b/src/xf86libinput.c index fd07cf3..b520b26 100644 --- a/src/xf86libinput.c +++ b/src/xf86libinput.c @@ -112,6 +112,7 @@ struct xf86libinput { struct options { BOOL tapping; + BOOL tap_drag; BOOL tap_drag_lock; BOOL natural_scrolling; BOOL left_handed; @@ -386,6 +387,13 @@ LibinputApplyConfig(DeviceIntPtr dev) "Failed to set Tapping DragLock to %d\n", driver_data->options.tap_drag_lock); + if (libinput_device_config_tap_get_finger_count(device) > 0 && + libinput_device_config_tap_set_drag_enabled(device, + driver_data->options.tap_drag) != LIBINPUT_CONFIG_STATUS_SUCCESS) + xf86IDrvMsg(pInfo, X_ERROR, + "Failed to set Tapping Drag to %d\n", + driver_data->options.tap_drag); + if (libinput_device_config_calibration_has_matrix(device) && libinput_device_config_calibration_set_matrix(device, driver_data->options.matrix) != LIBINPUT_CONFIG_STATUS_SUCCESS) @@ -1277,6 +1285,30 @@ xf86libinput_parse_tap_option(InputInfoPtr pInfo, } static inline BOOL +xf86libinput_parse_tap_drag_option(InputInfoPtr pInfo, + struct libinput_device *device) +{ + BOOL drag; + + if (libinput_device_config_tap_get_finger_count(device) == 0) + return FALSE; + + drag = xf86SetBoolOption(pInfo->options, + "TappingDrag", + libinput_device_config_tap_get_drag_enabled(device)); + + if (libinput_device_config_tap_set_drag_enabled(device, drag) != + LIBINPUT_CONFIG_STATUS_SUCCESS) { + xf86IDrvMsg(pInfo, X_ERROR, + "Failed to set Tapping Drag Lock to %d\n", + drag); + drag = libinput_device_config_tap_get_drag_enabled(device); + } + + return drag; +} + +static inline BOOL xf86libinput_parse_tap_drag_lock_option(InputInfoPtr pInfo, struct libinput_device *device) { @@ -1683,6 +1715,7 @@ xf86libinput_parse_options(InputInfoPtr pInfo, /* libinput options */ options->tapping = xf86libinput_parse_tap_option(pInfo, device); + options->tap_drag = xf86libinput_parse_tap_drag_option(pInfo, device); options->tap_drag_lock = xf86libinput_parse_tap_drag_lock_option(pInfo, device); options->speed = xf86libinput_parse_accel_option(pInfo, device); options->accel_profile = xf86libinput_parse_accel_profile_option(pInfo, device); @@ -2046,6 +2079,8 @@ _X_EXPORT XF86ModuleData libinputModuleData = { /* libinput-specific properties */ static Atom prop_tap; static Atom prop_tap_default; +static Atom prop_tap_drag; +static Atom prop_tap_drag_default; static Atom prop_tap_drag_lock; static Atom prop_tap_drag_lock_default; static Atom prop_calibration; @@ -2136,6 +2171,37 @@ LibinputSetPropertyTap(DeviceIntPtr dev, } static inline int +LibinputSetPropertyTapDrag(DeviceIntPtr dev, + Atom atom, + XIPropertyValuePtr val, + BOOL checkonly) +{ + InputInfoPtr pInfo = dev->public.devicePrivate; + struct xf86libinput *driver_data = pInfo->private; + struct libinput_device *device = driver_data->shared_device->device; + BOOL* data; + + if (val->format != 8 || val->size != 1 || val->type != XA_INTEGER) + return BadMatch; + + data = (BOOL*)val->data; + if (checkonly) { + if (*data != 0 && *data != 1) + return BadValue; + + if (!xf86libinput_check_device(dev, atom)) + return BadMatch; + + if (libinput_device_config_tap_get_finger_count(device) == 0) + return BadMatch; + } else { + driver_data->options.tap_drag = *data; + } + + return Success; +} + +static inline int LibinputSetPropertyTapDragLock(DeviceIntPtr dev, Atom atom, XIPropertyValuePtr val, @@ -2673,6 +2739,8 @@ LibinputSetProperty(DeviceIntPtr dev, Atom atom, XIPropertyValuePtr val, if (atom == prop_tap) rc = LibinputSetPropertyTap(dev, atom, val, checkonly); + else if (atom == prop_tap_drag) + rc = LibinputSetPropertyTapDrag(dev, atom, val, checkonly); else if (atom == prop_tap_drag_lock) rc = LibinputSetPropertyTapDragLock(dev, atom, val, checkonly); else if (atom == prop_calibration) @@ -2704,6 +2772,7 @@ LibinputSetProperty(DeviceIntPtr dev, Atom atom, XIPropertyValuePtr val, rc = LibinputSetPropertyHorizScroll(dev, atom, val, checkonly); else if (atom == prop_device || atom == prop_product_id || atom == prop_tap_default || + atom == prop_tap_drag_default || atom == prop_tap_drag_lock_default || atom == prop_calibration_default || atom == prop_accel_default || @@ -2778,6 +2847,30 @@ LibinputInitTapProperty(DeviceIntPtr dev, } static void +LibinputInitTapDragProperty(DeviceIntPtr dev, + struct xf86libinput *driver_data, + struct libinput_device *device) +{ + BOOL drag = driver_data->options.tap_drag; + + if (libinput_device_config_tap_get_finger_count(device) == 0) + return; + + prop_tap_drag = LibinputMakeProperty(dev, + LIBINPUT_PROP_TAP_DRAG, + XA_INTEGER, 8, + 1, &drag); + if (!prop_tap_drag) + return; + + drag = libinput_device_config_tap_get_default_drag_enabled(device); + prop_tap_drag_default = LibinputMakeProperty(dev, + LIBINPUT_PROP_TAP_DRAG_DEFAULT, + XA_INTEGER, 8, + 1, &drag); +} + +static void LibinputInitTapDragLockProperty(DeviceIntPtr dev, struct xf86libinput *driver_data, struct libinput_device *device) @@ -3293,6 +3386,7 @@ LibinputInitProperty(DeviceIntPtr dev) prop_float = XIGetKnownProperty("FLOAT"); LibinputInitTapProperty(dev, driver_data, device); + LibinputInitTapDragProperty(dev, driver_data, device); LibinputInitTapDragLockProperty(dev, driver_data, device); LibinputInitCalibrationProperty(dev, driver_data, device); LibinputInitAccelProperty(dev, driver_data, device); commit 20f5269a29b6f3697984872d689fbe8589e53b08 Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Wed Jan 27 11:12:48 2016 +1000 Fix default tapping drack lock property value Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> diff --git a/src/xf86libinput.c b/src/xf86libinput.c index 5e5b11b..fd07cf3 100644 --- a/src/xf86libinput.c +++ b/src/xf86libinput.c @@ -2794,7 +2794,7 @@ LibinputInitTapDragLockProperty(DeviceIntPtr dev, if (!prop_tap_drag_lock) return; - drag_lock = libinput_device_config_tap_get_default_enabled(device); + drag_lock = libinput_device_config_tap_get_default_drag_lock_enabled(device); prop_tap_drag_lock_default = LibinputMakeProperty(dev, LIBINPUT_PROP_TAP_DRAG_LOCK_DEFAULT, XA_INTEGER, 8, commit 3dacb28b206098f261d731195ed7556fc83837ed Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Tue Nov 24 13:00:52 2015 +1000 Allow hotplugging a device immediately This splits the hotplugging code up so we can use it through a callback but also as an immediate call that gives us back the device just hotplugged. Also added is the ability to add extra options to the device. Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> diff --git a/src/xf86libinput.c b/src/xf86libinput.c index 78aa832..5e5b11b 100644 --- a/src/xf86libinput.c +++ b/src/xf86libinput.c @@ -136,6 +136,11 @@ struct xf86libinput { struct xorg_list shared_device_link; }; +enum hotplug_when { + HOTPLUG_LATER, + HOTPLUG_NOW, +}; + static inline int use_server_fd(const InputInfoPtr pInfo) { return pInfo->fd > -1 && (pInfo->flags & XI86_SERVER_FD); @@ -1740,25 +1745,38 @@ struct xf86libinput_hotplug_info { InputOption *input_options; }; -static Bool -xf86libinput_hotplug_device(ClientPtr client, pointer closure) +static DeviceIntPtr +xf86libinput_hotplug_device(struct xf86libinput_hotplug_info *hotplug) { - struct xf86libinput_hotplug_info *hotplug = closure; - DeviceIntPtr unused; + DeviceIntPtr dev; - NewInputDeviceRequest(hotplug->input_options, - hotplug->attrs, - &unused); + if (NewInputDeviceRequest(hotplug->input_options, + hotplug->attrs, + &dev) != Success) + dev = NULL; input_option_free_list(&hotplug->input_options); FreeInputAttributes(hotplug->attrs); free(hotplug); + return dev; +} + +static Bool +xf86libinput_hotplug_device_cb(ClientPtr client, pointer closure) +{ + struct xf86libinput_hotplug_info *hotplug = closure; + + xf86libinput_hotplug_device(hotplug); + return TRUE; } -static void -xf86libinput_create_subdevice(InputInfoPtr pInfo, uint32_t capabilities) +static DeviceIntPtr +xf86libinput_create_subdevice(InputInfoPtr pInfo, + uint32_t capabilities, + enum hotplug_when when, + XF86OptionPtr extra_options) { struct xf86libinput *driver_data = pInfo->private; struct xf86libinput_device *shared_device; @@ -1773,6 +1791,7 @@ xf86libinput_create_subdevice(InputInfoPtr pInfo, uint32_t capabilities) options = xf86OptionListDuplicate(pInfo->options); options = xf86ReplaceStrOption(options, "_source", "_driver/libinput"); + options = xf86OptionListMerge(options, extra_options); if (capabilities & CAP_KEYBOARD) options = xf86ReplaceBoolOption(options, "_libinput/cap-keyboard", 1); @@ -1793,13 +1812,18 @@ xf86libinput_create_subdevice(InputInfoPtr pInfo, uint32_t capabilities) hotplug = calloc(1, sizeof(*hotplug)); if (!hotplug) - return; + return NULL; hotplug->input_options = iopts; hotplug->attrs = DuplicateInputAttributes(pInfo->attrs); xf86IDrvMsg(pInfo, X_INFO, "needs a virtual subdevice\n"); - QueueWorkProc(xf86libinput_hotplug_device, serverClient, hotplug); + if (when == HOTPLUG_LATER) + QueueWorkProc(xf86libinput_hotplug_device_cb, serverClient, hotplug); + else + return xf86libinput_hotplug_device(hotplug); + + return NULL; } static BOOL @@ -1939,7 +1963,10 @@ xf86libinput_pre_init(InputDriverPtr drv, driver_data->capabilities & CAP_KEYBOARD && driver_data->capabilities & (CAP_POINTER|CAP_TOUCH)) { driver_data->capabilities &= ~CAP_KEYBOARD; - xf86libinput_create_subdevice(pInfo, CAP_KEYBOARD); + xf86libinput_create_subdevice(pInfo, + CAP_KEYBOARD, + HOTPLUG_LATER, + NULL); } pInfo->type_name = xf86libinput_get_type_name(device, driver_data); commit db8e73141c3ebb09c19e95aab5dee46d331835df Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Mon Nov 23 15:31:59 2015 +1000 Change creating subdevices to something more generic Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> diff --git a/src/xf86libinput.c b/src/xf86libinput.c index 7008fac..78aa832 100644 --- a/src/xf86libinput.c +++ b/src/xf86libinput.c @@ -1758,7 +1758,7 @@ xf86libinput_hotplug_device(ClientPtr client, pointer closure) } static void -xf86libinput_create_keyboard_subdevice(InputInfoPtr pInfo) +xf86libinput_create_subdevice(InputInfoPtr pInfo, uint32_t capabilities) { struct xf86libinput *driver_data = pInfo->private; struct xf86libinput_device *shared_device; @@ -1773,7 +1773,13 @@ xf86libinput_create_keyboard_subdevice(InputInfoPtr pInfo) options = xf86OptionListDuplicate(pInfo->options); options = xf86ReplaceStrOption(options, "_source", "_driver/libinput"); - options = xf86ReplaceStrOption(options, "_libinput/caps", "keyboard"); + + if (capabilities & CAP_KEYBOARD) + options = xf86ReplaceBoolOption(options, "_libinput/cap-keyboard", 1); + if (capabilities & CAP_POINTER) + options = xf86ReplaceBoolOption(options, "_libinput/cap-pointer", 1); + if (capabilities & CAP_TOUCH) + options = xf86ReplaceBoolOption(options, "_libinput/cap-touch", 1); /* need convert from one option list to the other. woohoo. */ o = options; @@ -1809,6 +1815,21 @@ xf86libinput_is_subdevice(InputInfoPtr pInfo) return is_subdevice; } +static inline uint32_t +caps_from_options(InputInfoPtr pInfo) +{ + uint32_t capabilities = 0; + + if (xf86CheckBoolOption(pInfo->options, "_libinput/cap-keyboard", 0)) + capabilities |= CAP_KEYBOARD; + if (xf86CheckBoolOption(pInfo->options, "_libinput/cap-pointer", 0)) + capabilities |= CAP_POINTER; + if (xf86CheckBoolOption(pInfo->options, "_libinput/cap-touch", 0)) + capabilities |= CAP_TOUCH; + + return capabilities; +} + static int xf86libinput_pre_init(InputDriverPtr drv, InputInfoPtr pInfo, @@ -1903,7 +1924,7 @@ xf86libinput_pre_init(InputDriverPtr drv, if (libinput_device_has_capability(device, LIBINPUT_DEVICE_CAP_TOUCH)) driver_data->capabilities |= CAP_TOUCH; } else { - driver_data->capabilities = CAP_KEYBOARD; + driver_data->capabilities = caps_from_options(pInfo); } /* Disable acceleration in the server, libinput does it for us */ @@ -1918,7 +1939,7 @@ xf86libinput_pre_init(InputDriverPtr drv, driver_data->capabilities & CAP_KEYBOARD && driver_data->capabilities & (CAP_POINTER|CAP_TOUCH)) { driver_data->capabilities &= ~CAP_KEYBOARD; - xf86libinput_create_keyboard_subdevice(pInfo); + xf86libinput_create_subdevice(pInfo, CAP_KEYBOARD); } pInfo->type_name = xf86libinput_get_type_name(device, driver_data);