Hello community, here is the log from the commit of package xf86-input-libinput for openSUSE:Factory checked in at 2016-03-02 14:18:57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xf86-input-libinput (Old) and /work/SRC/openSUSE:Factory/.xf86-input-libinput.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "xf86-input-libinput" Changes: -------- --- /work/SRC/openSUSE:Factory/xf86-input-libinput/xf86-input-libinput.changes 2015-12-29 13:00:15.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.xf86-input-libinput.new/xf86-input-libinput.changes 2016-03-02 14:18:58.000000000 +0100 @@ -1,0 +2,10 @@ +Fri Feb 26 17:35:44 UTC 2016 - zaitor@opensuse.org + +- Update to version 0.17.0: + + Fix compiler warnings about missing tablet event cases. + + Add property/option for enabling/disabling tap-n-drag. + + Fix default tapping drag lock property value. + + Allow hotplugging a device immediately. + + Change creating subdevices to something more generic. + +------------------------------------------------------------------- Old: ---- xf86-input-libinput-0.16.0.tar.bz2 xf86-input-libinput-0.16.0.tar.bz2.sig New: ---- xf86-input-libinput-0.17.0.tar.bz2 xf86-input-libinput-0.17.0.tar.bz2.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xf86-input-libinput.spec ++++++ --- /var/tmp/diff_new_pack.7GHUF2/_old 2016-03-02 14:18:59.000000000 +0100 +++ /var/tmp/diff_new_pack.7GHUF2/_new 2016-03-02 14:18:59.000000000 +0100 @@ -1,7 +1,7 @@ # # spec file for package xf86-input-libinput # -# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: xf86-input-libinput -Version: 0.16.0 +Version: 0.17.0 Release: 0 Summary: Libinput driver for the Xorg X server License: MIT @@ -28,10 +28,10 @@ Source2: %{name}.keyring Patch0: n_enable-tapping.patch BuildRequires: pkg-config -BuildRequires: pkgconfig(inputproto) -BuildRequires: pkgconfig(libinput) >= 1.0.901 +BuildRequires: pkgconfig(inputproto) >= 2.2 +BuildRequires: pkgconfig(libinput) >= 1.1.901 BuildRequires: pkgconfig(xorg-macros) >= 1.13 -BuildRequires: pkgconfig(xorg-server) >= 1.7 +BuildRequires: pkgconfig(xorg-server) >= 1.10 BuildRequires: pkgconfig(xproto) #Supplements: xorg-x11-server # This was part of the xorg-x11-driver-input package up to version 7.6 ++++++ xf86-input-libinput-0.16.0.tar.bz2 -> xf86-input-libinput-0.17.0.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-input-libinput-0.16.0/ChangeLog new/xf86-input-libinput-0.17.0/ChangeLog --- old/xf86-input-libinput-0.16.0/ChangeLog 2015-12-23 04:55:18.000000000 +0100 +++ new/xf86-input-libinput-0.17.0/ChangeLog 2016-02-26 07:00:58.000000000 +0100 @@ -1,3 +1,56 @@ +commit 8136113139dd2a27fcfa4552da89aa110bc8fbe3 +Author: Peter Hutterer <peter.hutterer@who-t.net> +Date: Fri Feb 26 15:57:48 2016 +1000 + + xf86-input-libinput 0.17.0 + + Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> + +commit 202eb68dc061510d57900d29b3a76fe2ed811998 +Author: Peter Hutterer <peter.hutterer@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.hutterer@who-t.net> + +commit e8f5394b0734db41abd15ab72457aea99c25d9ab +Author: Peter Hutterer <peter.hutterer@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.hutterer@who-t.net> + Reviewed-by: Hans de Goede <hdegoede@redhat.com> + +commit 20f5269a29b6f3697984872d689fbe8589e53b08 +Author: Peter Hutterer <peter.hutterer@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.hutterer@who-t.net> + +commit 3dacb28b206098f261d731195ed7556fc83837ed +Author: Peter Hutterer <peter.hutterer@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.hutterer@who-t.net> + +commit db8e73141c3ebb09c19e95aab5dee46d331835df +Author: Peter Hutterer <peter.hutterer@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.hutterer@who-t.net> + commit 0d1851a000c5a80ba9b5787f516d2d72c62ce35e Author: Peter Hutterer <peter.hutterer@who-t.net> Date: Wed Dec 23 13:53:38 2015 +1000 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-input-libinput-0.16.0/Makefile.in new/xf86-input-libinput-0.17.0/Makefile.in --- old/xf86-input-libinput-0.16.0/Makefile.in 2015-12-23 04:54:42.000000000 +0100 +++ new/xf86-input-libinput-0.17.0/Makefile.in 2016-02-26 06:59:04.000000000 +0100 @@ -210,7 +210,8 @@ DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/xorg-libinput.pc.in COPYING ChangeLog INSTALL \ - compile config.guess config.sub install-sh ltmain.sh missing + compile config.guess config.sub depcomp install-sh ltmain.sh \ + missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-input-libinput-0.16.0/configure new/xf86-input-libinput-0.17.0/configure --- old/xf86-input-libinput-0.16.0/configure 2015-12-23 04:54:41.000000000 +0100 +++ new/xf86-input-libinput-0.17.0/configure 2016-02-26 06:59:03.000000000 +0100 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for xf86-input-libinput 0.16.0. +# Generated by GNU Autoconf 2.69 for xf86-input-libinput 0.17.0. # # Report bugs to https://bugs.freedesktop.org/enter_bug.cgi?product=xorg. # @@ -591,8 +591,8 @@ # Identity of this package. PACKAGE_NAME='xf86-input-libinput' PACKAGE_TARNAME='xf86-input-libinput' -PACKAGE_VERSION='0.16.0' -PACKAGE_STRING='xf86-input-libinput 0.16.0' +PACKAGE_VERSION='0.17.0' +PACKAGE_STRING='xf86-input-libinput 0.17.0' PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg' PACKAGE_URL='' @@ -1356,7 +1356,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -`configure' configures xf86-input-libinput 0.16.0 to adapt to many kinds of systems. +`configure' configures xf86-input-libinput 0.17.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1427,7 +1427,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of xf86-input-libinput 0.16.0:";; + short | recursive ) echo "Configuration of xf86-input-libinput 0.17.0:";; esac cat <<_ACEOF @@ -1561,7 +1561,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<_ACEOF -xf86-input-libinput configure 0.16.0 +xf86-input-libinput configure 0.17.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1885,7 +1885,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by xf86-input-libinput $as_me 0.16.0, which was +It was created by xf86-input-libinput $as_me 0.17.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2753,7 +2753,7 @@ # Define the identity of the package. PACKAGE='xf86-input-libinput' - VERSION='0.16.0' + VERSION='0.17.0' cat >>confdefs.h <<_ACEOF @@ -18377,12 +18377,12 @@ pkg_cv_LIBINPUT_CFLAGS="$LIBINPUT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: $PKG_CONFIG --exists --print-errors "libinput >= 1.0.901""; } >&5 - ($PKG_CONFIG --exists --print-errors "libinput >= 1.0.901") 2>&5 + { { $as_echo "$as_me:${as_lineno-$LINENO}: $PKG_CONFIG --exists --print-errors "libinput >= 1.1.901""; } >&5 + ($PKG_CONFIG --exists --print-errors "libinput >= 1.1.901") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: $? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_LIBINPUT_CFLAGS=`$PKG_CONFIG --cflags "libinput >= 1.0.901" 2>/dev/null` + pkg_cv_LIBINPUT_CFLAGS=`$PKG_CONFIG --cflags "libinput >= 1.1.901" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes @@ -18394,12 +18394,12 @@ pkg_cv_LIBINPUT_LIBS="$LIBINPUT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: $PKG_CONFIG --exists --print-errors "libinput >= 1.0.901""; } >&5 - ($PKG_CONFIG --exists --print-errors "libinput >= 1.0.901") 2>&5 + { { $as_echo "$as_me:${as_lineno-$LINENO}: $PKG_CONFIG --exists --print-errors "libinput >= 1.1.901""; } >&5 + ($PKG_CONFIG --exists --print-errors "libinput >= 1.1.901") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: $? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_LIBINPUT_LIBS=`$PKG_CONFIG --libs "libinput >= 1.0.901" 2>/dev/null` + pkg_cv_LIBINPUT_LIBS=`$PKG_CONFIG --libs "libinput >= 1.1.901" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes @@ -18420,14 +18420,14 @@ _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then - LIBINPUT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libinput >= 1.0.901" 2>&1` + LIBINPUT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libinput >= 1.1.901" 2>&1` else - LIBINPUT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libinput >= 1.0.901" 2>&1` + LIBINPUT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libinput >= 1.1.901" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBINPUT_PKG_ERRORS" >&5 - as_fn_error $? "Package requirements (libinput >= 1.0.901) were not met: + as_fn_error $? "Package requirements (libinput >= 1.1.901) were not met: $LIBINPUT_PKG_ERRORS @@ -19030,7 +19030,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by xf86-input-libinput $as_me 0.16.0, which was +This file was extended by xf86-input-libinput $as_me 0.17.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -19096,7 +19096,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\""`$]/\\&/g'`" ac_cs_version="\ -xf86-input-libinput config.status 0.16.0 +xf86-input-libinput config.status 0.17.0 configured by $0, generated by GNU Autoconf 2.69, with options \"$ac_cs_config\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-input-libinput-0.16.0/configure.ac new/xf86-input-libinput-0.17.0/configure.ac --- old/xf86-input-libinput-0.16.0/configure.ac 2015-12-23 04:52:26.000000000 +0100 +++ new/xf86-input-libinput-0.17.0/configure.ac 2016-02-26 06:57:25.000000000 +0100 @@ -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]) @@ -45,7 +45,7 @@ # 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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-input-libinput-0.16.0/include/libinput-properties.h new/xf86-input-libinput-0.17.0/include/libinput-properties.h --- old/xf86-input-libinput-0.16.0/include/libinput-properties.h 2015-10-26 01:02:19.000000000 +0100 +++ new/xf86-input-libinput-0.17.0/include/libinput-properties.h 2016-02-08 01:46:23.000000000 +0100 @@ -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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-input-libinput-0.16.0/man/libinput.man new/xf86-input-libinput-0.17.0/man/libinput.man --- old/xf86-input-libinput-0.16.0/man/libinput.man 2015-11-13 02:13:39.000000000 +0100 +++ new/xf86-input-libinput-0.17.0/man/libinput.man 2016-02-08 01:46:23.000000000 +0100 @@ -129,6 +129,14 @@ .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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-input-libinput-0.16.0/src/xf86libinput.c new/xf86-input-libinput-0.17.0/src/xf86libinput.c --- old/xf86-input-libinput-0.16.0/src/xf86libinput.c 2015-12-23 04:52:01.000000000 +0100 +++ new/xf86-input-libinput-0.17.0/src/xf86libinput.c 2016-02-26 06:56:57.000000000 +0100 @@ -112,6 +112,7 @@ struct options { BOOL tapping; + BOOL tap_drag; BOOL tap_drag_lock; BOOL natural_scrolling; BOOL left_handed; @@ -136,6 +137,11 @@ 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); @@ -381,6 +387,13 @@ "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) @@ -1118,6 +1131,11 @@ 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; } } @@ -1272,6 +1290,30 @@ } 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) { @@ -1678,6 +1720,7 @@ /* 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); @@ -1740,25 +1783,38 @@ 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_keyboard_subdevice(InputInfoPtr pInfo) +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,7 +1829,14 @@ options = xf86OptionListDuplicate(pInfo->options); options = xf86ReplaceStrOption(options, "_source", "_driver/libinput"); - options = xf86ReplaceStrOption(options, "_libinput/caps", "keyboard"); + options = xf86OptionListMerge(options, extra_options); + + 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; @@ -1787,13 +1850,18 @@ 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 @@ -1809,6 +1877,21 @@ 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 +1986,7 @@ 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 +2001,10 @@ 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, + HOTPLUG_LATER, + NULL); } pInfo->type_name = xf86libinput_get_type_name(device, driver_data); @@ -1998,6 +2084,8 @@ /* 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; @@ -2088,6 +2176,37 @@ } 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, @@ -2625,6 +2744,8 @@ 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) @@ -2656,6 +2777,7 @@ 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 || @@ -2730,6 +2852,30 @@ } 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) @@ -2746,7 +2892,7 @@ 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, @@ -3245,6 +3391,7 @@ 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);