Fix axis labelling and single-axis relative devices
This commit is contained in:
		
							parent
							
								
									4cf85ac7e1
								
							
						
					
					
						commit
						989a2ebe29
					
				
							
								
								
									
										70
									
								
								0001-Fix-axis-labelling-for-mixed-devices.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								0001-Fix-axis-labelling-for-mixed-devices.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,70 @@ | ||||
| From be53e80fafbc1474f07737fa5817275ad79d9323 Mon Sep 17 00:00:00 2001 | ||||
| From: Peter Hutterer <peter.hutterer@who-t.net> | ||||
| Date: Thu, 12 Jan 2012 11:01:22 +1000 | ||||
| Subject: [PATCH] Fix axis labelling for mixed devices. | ||||
| 
 | ||||
| If a device has both relative and absolute axes, we'd initialise the | ||||
| relative axes but label them with the absolute labels. | ||||
| Fix this by properly unsetting the flags before we initialise the axes and | ||||
| then restoring them on failure. | ||||
| 
 | ||||
| Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> | ||||
| ---
 | ||||
|  src/evdev.c |   15 ++++++++++++--- | ||||
|  1 files changed, 12 insertions(+), 3 deletions(-) | ||||
| 
 | ||||
| diff --git a/src/evdev.c b/src/evdev.c
 | ||||
| index 989a255..86a9e55 100644
 | ||||
| --- a/src/evdev.c
 | ||||
| +++ b/src/evdev.c
 | ||||
| @@ -1628,12 +1628,18 @@ static void
 | ||||
|  EvdevInitAbsValuators(DeviceIntPtr device, EvdevPtr pEvdev) | ||||
|  { | ||||
|      InputInfoPtr pInfo = device->public.devicePrivate; | ||||
| +    int has_rel_axes = pEvdev->flags & EVDEV_RELATIVE_EVENTS;
 | ||||
| +
 | ||||
| +    pEvdev->flags &= ~EVDEV_RELATIVE_EVENTS;
 | ||||
|   | ||||
|      if (EvdevAddAbsValuatorClass(device) == Success) { | ||||
|          xf86IDrvMsg(pInfo, X_INFO,"initialized for absolute axes.\n"); | ||||
|      } else { | ||||
|          xf86IDrvMsg(pInfo, X_ERROR,"failed to initialize for absolute axes.\n"); | ||||
|          pEvdev->flags &= ~EVDEV_ABSOLUTE_EVENTS; | ||||
| +
 | ||||
| +        if (has_rel_axes)
 | ||||
| +            pEvdev->flags |= EVDEV_RELATIVE_EVENTS;
 | ||||
|      } | ||||
|  } | ||||
|   | ||||
| @@ -1643,14 +1649,14 @@ EvdevInitRelValuators(DeviceIntPtr device, EvdevPtr pEvdev)
 | ||||
|      InputInfoPtr pInfo = device->public.devicePrivate; | ||||
|      int has_abs_axes = pEvdev->flags & EVDEV_ABSOLUTE_EVENTS; | ||||
|   | ||||
| +    pEvdev->flags &= ~EVDEV_ABSOLUTE_EVENTS;
 | ||||
| +
 | ||||
|      if (EvdevAddRelValuatorClass(device) == Success) { | ||||
|   | ||||
|          xf86IDrvMsg(pInfo, X_INFO,"initialized for relative axes.\n"); | ||||
|   | ||||
| -        if (has_abs_axes) {
 | ||||
| +        if (has_abs_axes)
 | ||||
|              xf86IDrvMsg(pInfo, X_WARNING,"ignoring absolute axes.\n"); | ||||
| -            pEvdev->flags &= ~EVDEV_ABSOLUTE_EVENTS;
 | ||||
| -        }
 | ||||
|   | ||||
|      } else { | ||||
|          xf86IDrvMsg(pInfo, X_ERROR,"failed to initialize for relative axes.\n"); | ||||
| @@ -1658,7 +1664,10 @@ EvdevInitRelValuators(DeviceIntPtr device, EvdevPtr pEvdev)
 | ||||
|          pEvdev->flags &= ~EVDEV_RELATIVE_EVENTS; | ||||
|   | ||||
|          if (has_abs_axes) | ||||
| +        {
 | ||||
| +            pEvdev->flags |= EVDEV_ABSOLUTE_EVENTS;
 | ||||
|              EvdevInitAbsValuators(device, pEvdev); | ||||
| +        }
 | ||||
|      } | ||||
|  } | ||||
|   | ||||
| -- 
 | ||||
| 1.7.7.5 | ||||
| 
 | ||||
| @ -0,0 +1,48 @@ | ||||
| From dd3a14f13c21277e81c1e9c9c309a4e5b6924351 Mon Sep 17 00:00:00 2001 | ||||
| From: Peter Hutterer <peter.hutterer@who-t.net> | ||||
| Date: Thu, 12 Jan 2012 11:03:30 +1000 | ||||
| Subject: [PATCH] Force REL_X/REL_Y to exist on devices with any relative axes | ||||
|  (#44655) | ||||
| 
 | ||||
| Too much in the server relies on x/y to exist and to be axes 0 and 1. Since | ||||
| smooth scrolling we initialise wheels as axes too, so if any relative axes | ||||
| exist, initialize REL_X/Y as well. | ||||
| 
 | ||||
| For servers up to 1.11: a scrollwheel-only device now has relative axes | ||||
| where it only had buttons before. | ||||
| 
 | ||||
| For servers 1.12 or later: the device now has x/y in addition to the scroll | ||||
| axes. | ||||
| 
 | ||||
| X.Org Bug 44655 <http://bugs.freedesktop.org/show_bug.cgi?id=44655> | ||||
| 
 | ||||
| Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> | ||||
| ---
 | ||||
|  src/evdev.c |   11 +++++++++++ | ||||
|  1 files changed, 11 insertions(+), 0 deletions(-) | ||||
| 
 | ||||
| diff --git a/src/evdev.c b/src/evdev.c
 | ||||
| index 86a9e55..77609fb 100644
 | ||||
| --- a/src/evdev.c
 | ||||
| +++ b/src/evdev.c
 | ||||
| @@ -2052,6 +2052,17 @@ EvdevProbe(InputInfoPtr pInfo)
 | ||||
|              pEvdev->num_buttons = num_buttons; | ||||
|          } | ||||
|   | ||||
| +        /* Some devices only have other rel axes (e.g. wheels), but we
 | ||||
| +         * still need x/y for these. The server relies on devices having
 | ||||
| +         * x/y as axes 0/1 and core/XI 1.x clients expect it too (#44655) */
 | ||||
| +        if (!EvdevBitIsSet(pEvdev->rel_bitmask, REL_X) ||
 | ||||
| +                   !EvdevBitIsSet(pEvdev->rel_bitmask, REL_Y))
 | ||||
| +        {
 | ||||
| +                xf86IDrvMsg(pInfo, X_INFO, "Forcing x/y axes to exist.\n");
 | ||||
| +                EvdevSetBit(pEvdev->rel_bitmask, REL_X);
 | ||||
| +                EvdevSetBit(pEvdev->rel_bitmask, REL_Y);
 | ||||
| +        }
 | ||||
| +
 | ||||
|          if (!ignore_rel) | ||||
|          { | ||||
|              xf86IDrvMsg(pInfo, X_PROBED, "Found relative axes\n"); | ||||
| -- 
 | ||||
| 1.7.7.5 | ||||
| 
 | ||||
| @ -8,7 +8,7 @@ | ||||
| Summary:    Xorg X11 evdev input driver | ||||
| Name:       xorg-x11-drv-evdev | ||||
| Version:    2.6.99.901 | ||||
| Release:    3%{?gitdate:.%{gitdate}git%{gitversion}}%{dist} | ||||
| Release:    4%{?gitdate:.%{gitdate}git%{gitversion}}%{dist} | ||||
| URL:        http://www.x.org | ||||
| License:    MIT | ||||
| Group:      User Interface/X Hardware Support | ||||
| @ -21,6 +21,9 @@ Source2:    commitid | ||||
| Source0:    ftp://ftp.x.org/pub/individual/driver/%{tarball}-%{version}.tar.bz2 | ||||
| %endif | ||||
| 
 | ||||
| Patch01: 0001-Fix-axis-labelling-for-mixed-devices.patch | ||||
| Patch02: 0001-Force-REL_X-REL_Y-to-exist-on-devices-with-any-relat.patch | ||||
| 
 | ||||
| ExcludeArch: s390 s390x | ||||
| 
 | ||||
| BuildRequires: autoconf automake libtool | ||||
| @ -39,6 +42,9 @@ X.Org X11 evdev input driver. | ||||
| %prep | ||||
| %setup -q -n %{tarball}-%{?gitdate:%{gitdate}}%{!?gitdate:%{version}} | ||||
| 
 | ||||
| %patch01 -p1 | ||||
| %patch02 -p1 | ||||
| 
 | ||||
| %build | ||||
| autoreconf -v --install || exit 1 | ||||
| %configure --disable-static --disable-silent-rules | ||||
| @ -79,6 +85,9 @@ X.Org X11 evdev input driver development files. | ||||
| 
 | ||||
| 
 | ||||
| %changelog | ||||
| * Thu Jan 12 2012 Peter Hutterer <peter.hutterer@redhat.com> 2.6.99.901-4.20120103git965338e9d | ||||
| - Fix axis labelling and single-axis relative devices | ||||
| 
 | ||||
| * Wed Jan 04 2012 Peter Hutterer <peter.hutterer@redhat.com> 2.6.99.901-3.20120103git965338e9d | ||||
| - Add mtdev as dependency | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user