libinput 0.17
This commit is contained in:
		
							parent
							
								
									9f8c03f29f
								
							
						
					
					
						commit
						bdcf52556f
					
				
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -15,3 +15,4 @@ | ||||
| /libinput-0.14.1.tar.xz | ||||
| /libinput-0.15.0.tar.xz | ||||
| /libinput-0.16.0.tar.xz | ||||
| /libinput-0.17.0.tar.xz | ||||
|  | ||||
| @ -1,46 +0,0 @@ | ||||
| From 5b940e6a3f066ff25034bcf5a83278b695ad6836 Mon Sep 17 00:00:00 2001 | ||||
| From: Peter Hutterer <peter.hutterer@who-t.net> | ||||
| Date: Tue, 2 Jun 2015 16:32:41 +1000 | ||||
| Subject: [PATCH libinput] evdev: always default to the middle button for | ||||
|  button-scrolling | ||||
| 
 | ||||
| The current code only defaulted to the middle button for those devices that | ||||
| used button scrolling by default, requiring the user to enable button | ||||
| scrolling _and_ set the button before it is active. This causes some | ||||
| confusion. | ||||
| 
 | ||||
| There is no real benefit to leaving the button at 0 when the scroll | ||||
| method isn't enabled anyway. So always default to the middle button (if | ||||
| available). | ||||
| 
 | ||||
| https://bugzilla.redhat.com/show_bug.cgi?id=1227182 | ||||
| 
 | ||||
| Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> | ||||
| Reviewed-by: Hans de Goede <hdegoede@redhat.com> | ||||
| ---
 | ||||
|  src/evdev.c | 9 +-------- | ||||
|  1 file changed, 1 insertion(+), 8 deletions(-) | ||||
| 
 | ||||
| diff --git a/src/evdev.c b/src/evdev.c
 | ||||
| index ed1a9a3..8932b6c 100644
 | ||||
| --- a/src/evdev.c
 | ||||
| +++ b/src/evdev.c
 | ||||
| @@ -1112,14 +1112,7 @@ evdev_scroll_get_default_button(struct libinput_device *device)
 | ||||
|  { | ||||
|  	struct evdev_device *evdev = (struct evdev_device *)device; | ||||
|   | ||||
| -	if (libevdev_has_property(evdev->evdev, INPUT_PROP_POINTING_STICK))
 | ||||
| -		return BTN_MIDDLE;
 | ||||
| -
 | ||||
| -	/* A device that defaults to button scrolling defaults
 | ||||
| -	   to BTN_MIDDLE */
 | ||||
| -	if (evdev_scroll_get_default_method(device) ==
 | ||||
| -		LIBINPUT_CONFIG_SCROLL_ON_BUTTON_DOWN &&
 | ||||
| -	    libevdev_has_event_code(evdev->evdev, EV_KEY, BTN_MIDDLE))
 | ||||
| +	if( libevdev_has_event_code(evdev->evdev, EV_KEY, BTN_MIDDLE))
 | ||||
|  		return BTN_MIDDLE; | ||||
|   | ||||
|  	return 0; | ||||
| -- 
 | ||||
| 2.4.1 | ||||
| 
 | ||||
| @ -1,58 +0,0 @@ | ||||
| From 578c4e81c2606abb969972186b013f67fb152040 Mon Sep 17 00:00:00 2001 | ||||
| From: Peter Hutterer <peter.hutterer@who-t.net> | ||||
| Date: Thu, 30 Apr 2015 15:23:34 +1000 | ||||
| Subject: [PATCH libinput 1/3] filter: pass last_velocity as argument | ||||
| 
 | ||||
| Let the caller set the various fields, here we just calculate stuff. | ||||
| No functional changes. | ||||
| 
 | ||||
| Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> | ||||
| Reviewed-by: Hans de Goede <hdegoede@redhat.com> | ||||
| ---
 | ||||
|  src/filter.c | 15 +++++++++++---- | ||||
|  1 file changed, 11 insertions(+), 4 deletions(-) | ||||
| 
 | ||||
| diff --git a/src/filter.c b/src/filter.c
 | ||||
| index 0cdcb63..fe86215 100644
 | ||||
| --- a/src/filter.c
 | ||||
| +++ b/src/filter.c
 | ||||
| @@ -197,17 +197,20 @@ acceleration_profile(struct pointer_accelerator *accel,
 | ||||
|   | ||||
|  static double | ||||
|  calculate_acceleration(struct pointer_accelerator *accel, | ||||
| -		       void *data, double velocity, uint64_t time)
 | ||||
| +		       void *data,
 | ||||
| +		       double velocity,
 | ||||
| +		       double last_velocity,
 | ||||
| +		       uint64_t time)
 | ||||
|  { | ||||
|  	double factor; | ||||
|   | ||||
|  	/* Use Simpson's rule to calculate the avarage acceleration between | ||||
|  	 * the previous motion and the most recent. */ | ||||
|  	factor = acceleration_profile(accel, data, velocity, time); | ||||
| -	factor += acceleration_profile(accel, data, accel->last_velocity, time);
 | ||||
| +	factor += acceleration_profile(accel, data, last_velocity, time);
 | ||||
|  	factor += 4.0 * | ||||
|  		acceleration_profile(accel, data, | ||||
| -				     (accel->last_velocity + velocity) / 2,
 | ||||
| +				     (last_velocity + velocity) / 2,
 | ||||
|  				     time); | ||||
|   | ||||
|  	factor = factor / 6.0; | ||||
| @@ -228,7 +231,11 @@ accelerator_filter(struct motion_filter *filter,
 | ||||
|   | ||||
|  	feed_trackers(accel, unaccelerated, time); | ||||
|  	velocity = calculate_velocity(accel, time); | ||||
| -	accel_value = calculate_acceleration(accel, data, velocity, time);
 | ||||
| +	accel_value = calculate_acceleration(accel,
 | ||||
| +					     data,
 | ||||
| +					     velocity,
 | ||||
| +					     accel->last_velocity,
 | ||||
| +					     time);
 | ||||
|   | ||||
|  	accelerated.x = accel_value * unaccelerated->x; | ||||
|  	accelerated.y = accel_value * unaccelerated->y; | ||||
| -- 
 | ||||
| 2.4.1 | ||||
| 
 | ||||
| @ -1,32 +0,0 @@ | ||||
| From b8518f8f7c1611c58badb9d73e66d9c722849b55 Mon Sep 17 00:00:00 2001 | ||||
| From: Peter Hutterer <peter.hutterer@who-t.net> | ||||
| Date: Tue, 2 Jun 2015 13:04:44 +1000 | ||||
| Subject: [PATCH libinput] touchpad: reduce tap-n-drag timeout to 300ms | ||||
| 
 | ||||
| The current 500ms is too long, reduce it to 300ms instead. This is still long | ||||
| enough to get multiple movements but not that long that it feels like the | ||||
| button is stuck. | ||||
| 
 | ||||
| https://bugs.freedesktop.org/show_bug.cgi?id=90613 | ||||
| 
 | ||||
| Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> | ||||
| ---
 | ||||
|  src/evdev-mt-touchpad-tap.c | 2 +- | ||||
|  1 file changed, 1 insertion(+), 1 deletion(-) | ||||
| 
 | ||||
| diff --git a/src/evdev-mt-touchpad-tap.c b/src/evdev-mt-touchpad-tap.c
 | ||||
| index 55b7916..b51f083 100644
 | ||||
| --- a/src/evdev-mt-touchpad-tap.c
 | ||||
| +++ b/src/evdev-mt-touchpad-tap.c
 | ||||
| @@ -37,7 +37,7 @@
 | ||||
|  #define CASE_RETURN_STRING(a) case a: return #a | ||||
|   | ||||
|  #define DEFAULT_TAP_TIMEOUT_PERIOD 180 | ||||
| -#define DEFAULT_DRAG_TIMEOUT_PERIOD 500
 | ||||
| +#define DEFAULT_DRAG_TIMEOUT_PERIOD 300
 | ||||
|  #define DEFAULT_TAP_MOVE_THRESHOLD TP_MM_TO_DPI_NORMALIZED(3) | ||||
|   | ||||
|  enum tap_event { | ||||
| -- 
 | ||||
| 2.4.1 | ||||
| 
 | ||||
| @ -1,34 +0,0 @@ | ||||
| From a81051e5136aeb23ce0ed85e387ae2d9b9447faa Mon Sep 17 00:00:00 2001 | ||||
| From: Peter Hutterer <peter.hutterer@who-t.net> | ||||
| Date: Wed, 22 Apr 2015 11:46:57 +1000 | ||||
| Subject: [PATCH libinput 2/3] filter: up the motion timeout to 1 second | ||||
| 
 | ||||
| This timeout defines how far back in the events we search for velocity | ||||
| calculations. For really slow movements, 300ms is not enough. It causes the | ||||
| velocity to be 0 -> accel factor of 0 -> no movement. | ||||
| As a result, really slow movement does not move the cursor. | ||||
| 
 | ||||
| Up the timeout to 1 second instead. | ||||
| 
 | ||||
| Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> | ||||
| Reviewed-by: Hans de Goede <hdegoede@redhat.com> | ||||
| ---
 | ||||
|  src/filter.c | 2 +- | ||||
|  1 file changed, 1 insertion(+), 1 deletion(-) | ||||
| 
 | ||||
| diff --git a/src/filter.c b/src/filter.c
 | ||||
| index fe86215..3845c7f 100644
 | ||||
| --- a/src/filter.c
 | ||||
| +++ b/src/filter.c
 | ||||
| @@ -78,7 +78,7 @@ filter_get_speed(struct motion_filter *filter)
 | ||||
|   */ | ||||
|   | ||||
|  #define MAX_VELOCITY_DIFF	1.0 /* units/ms */ | ||||
| -#define MOTION_TIMEOUT		300 /* (ms) */
 | ||||
| +#define MOTION_TIMEOUT		1000 /* (ms) */
 | ||||
|  #define NUM_POINTER_TRACKERS	16 | ||||
|   | ||||
|  struct pointer_tracker { | ||||
| -- 
 | ||||
| 2.4.1 | ||||
| 
 | ||||
| @ -1,130 +0,0 @@ | ||||
| From 289e4675c81d2fe32650295ce2b6a66a1ebb9f24 Mon Sep 17 00:00:00 2001 | ||||
| From: Peter Hutterer <peter.hutterer@who-t.net> | ||||
| Date: Wed, 22 Apr 2015 12:25:13 +1000 | ||||
| Subject: [PATCH libinput 3/3] filter: enforce minimum velocity | ||||
| 
 | ||||
| In the current code, a timeout or direction change on the first tracker will | ||||
| result in a velocity of 0. Really slow movements will thus always be zero, and | ||||
| the first event after a direction is swallowed. | ||||
| 
 | ||||
| Enforce a minimum velocity: | ||||
| In the case of a timeout, assume the current velocity is that of | ||||
| distance/timeout. In the case of a direction change, the velocity is simply | ||||
| that since the last tracker. | ||||
| 
 | ||||
| Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> | ||||
| Reviewed-by: Hans de Goede <hdegoede@redhat.com> | ||||
| ---
 | ||||
|  src/filter.c    | 34 ++++++++++++++++++++++++++++++---- | ||||
|  test/touchpad.c | 10 +++++----- | ||||
|  2 files changed, 35 insertions(+), 9 deletions(-) | ||||
| 
 | ||||
| diff --git a/src/filter.c b/src/filter.c
 | ||||
| index 3845c7f..c54d866 100644
 | ||||
| --- a/src/filter.c
 | ||||
| +++ b/src/filter.c
 | ||||
| @@ -144,6 +144,24 @@ calculate_tracker_velocity(struct pointer_tracker *tracker, uint64_t time)
 | ||||
|  	return normalized_length(tracker->delta) / tdelta; /* units/ms */ | ||||
|  } | ||||
|   | ||||
| +static inline double
 | ||||
| +calculate_velocity_after_timeout(struct pointer_tracker *tracker)
 | ||||
| +{
 | ||||
| +	/* First movement after timeout needs special handling.
 | ||||
| +	 *
 | ||||
| +	 * When we trigger the timeout, the last event is too far in the
 | ||||
| +	 * past to use it for velocity calculation across multiple tracker
 | ||||
| +	 * values.
 | ||||
| +	 *
 | ||||
| +	 * Use the motion timeout itself to calculate the speed rather than
 | ||||
| +	 * the last tracker time. This errs on the side of being too fast
 | ||||
| +	 * for really slow movements but provides much more useful initial
 | ||||
| +	 * movement in normal use-cases (pause, move, pause, move)
 | ||||
| +	 */
 | ||||
| +	return calculate_tracker_velocity(tracker,
 | ||||
| +					  tracker->time + MOTION_TIMEOUT);
 | ||||
| +}
 | ||||
| +
 | ||||
|  static double | ||||
|  calculate_velocity(struct pointer_accelerator *accel, uint64_t time) | ||||
|  { | ||||
| @@ -163,15 +181,23 @@ calculate_velocity(struct pointer_accelerator *accel, uint64_t time)
 | ||||
|   | ||||
|  		/* Stop if too far away in time */ | ||||
|  		if (time - tracker->time > MOTION_TIMEOUT || | ||||
| -		    tracker->time > time)
 | ||||
| +		    tracker->time > time) {
 | ||||
| +			if (offset == 1)
 | ||||
| +				result = calculate_velocity_after_timeout(tracker);
 | ||||
|  			break; | ||||
| +		}
 | ||||
| +
 | ||||
| +		velocity = calculate_tracker_velocity(tracker, time);
 | ||||
|   | ||||
|  		/* Stop if direction changed */ | ||||
|  		dir &= tracker->dir; | ||||
| -		if (dir == 0)
 | ||||
| +		if (dir == 0) {
 | ||||
| +			/* First movement after dirchange - velocity is that
 | ||||
| +			 * of the last movement */
 | ||||
| +			if (offset == 1)
 | ||||
| +				result = velocity;
 | ||||
|  			break; | ||||
| -
 | ||||
| -		velocity = calculate_tracker_velocity(tracker, time);
 | ||||
| +		}
 | ||||
|   | ||||
|  		if (initial_velocity == 0.0) { | ||||
|  			result = initial_velocity = velocity; | ||||
| diff --git a/test/touchpad.c b/test/touchpad.c
 | ||||
| index 5579c04..a747910 100644
 | ||||
| --- a/test/touchpad.c
 | ||||
| +++ b/test/touchpad.c
 | ||||
| @@ -2959,7 +2959,7 @@ START_TEST(touchpad_edge_scroll)
 | ||||
|  	litest_touch_up(dev, 0); | ||||
|   | ||||
|  	libinput_dispatch(li); | ||||
| -	litest_assert_scroll(li, LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL, 10);
 | ||||
| +	litest_assert_scroll(li, LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL, 4);
 | ||||
|  	litest_assert_empty_queue(li); | ||||
|   | ||||
|  	litest_touch_down(dev, 0, 99, 80); | ||||
| @@ -2967,7 +2967,7 @@ START_TEST(touchpad_edge_scroll)
 | ||||
|  	litest_touch_up(dev, 0); | ||||
|   | ||||
|  	libinput_dispatch(li); | ||||
| -	litest_assert_scroll(li, LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL, -10);
 | ||||
| +	litest_assert_scroll(li, LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL, -4);
 | ||||
|  	litest_assert_empty_queue(li); | ||||
|   | ||||
|  	litest_touch_down(dev, 0, 20, 99); | ||||
| @@ -2975,7 +2975,7 @@ START_TEST(touchpad_edge_scroll)
 | ||||
|  	litest_touch_up(dev, 0); | ||||
|   | ||||
|  	libinput_dispatch(li); | ||||
| -	litest_assert_scroll(li, LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL, 10);
 | ||||
| +	litest_assert_scroll(li, LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL, 4);
 | ||||
|  	litest_assert_empty_queue(li); | ||||
|   | ||||
|  	litest_touch_down(dev, 0, 70, 99); | ||||
| @@ -2983,7 +2983,7 @@ START_TEST(touchpad_edge_scroll)
 | ||||
|  	litest_touch_up(dev, 0); | ||||
|   | ||||
|  	libinput_dispatch(li); | ||||
| -	litest_assert_scroll(li, LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL, -10);
 | ||||
| +	litest_assert_scroll(li, LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL, -4);
 | ||||
|  	litest_assert_empty_queue(li); | ||||
|  } | ||||
|  END_TEST | ||||
| @@ -3065,7 +3065,7 @@ START_TEST(touchpad_edge_scroll_no_motion)
 | ||||
|  	litest_touch_up(dev, 0); | ||||
|  	libinput_dispatch(li); | ||||
|   | ||||
| -	litest_assert_scroll(li, LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL, 5);
 | ||||
| +	litest_assert_scroll(li, LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL, 4);
 | ||||
|  	litest_assert_empty_queue(li); | ||||
|  } | ||||
|  END_TEST | ||||
| -- 
 | ||||
| 2.4.1 | ||||
| 
 | ||||
| @ -4,8 +4,8 @@ | ||||
| %global gitversion 58abea394 | ||||
| 
 | ||||
| Name:           libinput | ||||
| Version:        0.16.0 | ||||
| Release:        4%{?gitdate:.%{gitdate}git%{gitversion}}%{?dist} | ||||
| Version:        0.17.0 | ||||
| Release:        1%{?gitdate:.%{gitdate}git%{gitversion}}%{?dist} | ||||
| Summary:        Input device library | ||||
| 
 | ||||
| License:        MIT | ||||
| @ -18,16 +18,6 @@ Source2:        commitid | ||||
| Source0:        http://www.freedesktop.org/software/libinput/libinput-%{version}.tar.xz | ||||
| %endif | ||||
| 
 | ||||
| Patch01:        0001-filter-pass-last_velocity-as-argument.patch | ||||
| Patch02:        0002-filter-up-the-motion-timeout-to-1-second.patch | ||||
| Patch03:        0003-filter-enforce-minimum-velocity.patch | ||||
| 
 | ||||
| #Bug 1225998 - Tap-and-drag touchpad behavior not configurable | ||||
| Patch04:        0001-touchpad-reduce-tap-n-drag-timeout-to-300ms.patch | ||||
| 
 | ||||
| # Bug 1227182 - Middle click pastes on button press instead of release | ||||
| Patch05:        0001-evdev-always-default-to-the-middle-button-for-button.patch | ||||
| 
 | ||||
| BuildRequires:  git | ||||
| BuildRequires:  autoconf automake libtool pkgconfig | ||||
| BuildRequires:  libevdev-devel | ||||
| @ -103,6 +93,9 @@ find $RPM_BUILD_ROOT -name '*.la' -delete | ||||
| 
 | ||||
| 
 | ||||
| %changelog | ||||
| * Thu Jun 04 2015 Peter Hutterer <peter.hutterer@redhat.com> 0.17.0-1 | ||||
| - libinput 0.17 | ||||
| 
 | ||||
| * Tue Jun 02 2015 Peter Hutterer <peter.hutterer@redhat.com> 0.16.0-4 | ||||
| - Always set the middle button as default button for button-scrolling | ||||
|   (#1227182) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user