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 | Summary:    Xorg X11 evdev input driver | ||||||
| Name:       xorg-x11-drv-evdev | Name:       xorg-x11-drv-evdev | ||||||
| Version:    2.6.99.901 | Version:    2.6.99.901 | ||||||
| Release:    3%{?gitdate:.%{gitdate}git%{gitversion}}%{dist} | Release:    4%{?gitdate:.%{gitdate}git%{gitversion}}%{dist} | ||||||
| URL:        http://www.x.org | URL:        http://www.x.org | ||||||
| License:    MIT | License:    MIT | ||||||
| Group:      User Interface/X Hardware Support | Group:      User Interface/X Hardware Support | ||||||
| @ -21,6 +21,9 @@ Source2:    commitid | |||||||
| Source0:    ftp://ftp.x.org/pub/individual/driver/%{tarball}-%{version}.tar.bz2 | Source0:    ftp://ftp.x.org/pub/individual/driver/%{tarball}-%{version}.tar.bz2 | ||||||
| %endif | %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 | ExcludeArch: s390 s390x | ||||||
| 
 | 
 | ||||||
| BuildRequires: autoconf automake libtool | BuildRequires: autoconf automake libtool | ||||||
| @ -39,6 +42,9 @@ X.Org X11 evdev input driver. | |||||||
| %prep | %prep | ||||||
| %setup -q -n %{tarball}-%{?gitdate:%{gitdate}}%{!?gitdate:%{version}} | %setup -q -n %{tarball}-%{?gitdate:%{gitdate}}%{!?gitdate:%{version}} | ||||||
| 
 | 
 | ||||||
|  | %patch01 -p1 | ||||||
|  | %patch02 -p1 | ||||||
|  | 
 | ||||||
| %build | %build | ||||||
| autoreconf -v --install || exit 1 | autoreconf -v --install || exit 1 | ||||||
| %configure --disable-static --disable-silent-rules | %configure --disable-static --disable-silent-rules | ||||||
| @ -79,6 +85,9 @@ X.Org X11 evdev input driver development files. | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| %changelog | %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 | * Wed Jan 04 2012 Peter Hutterer <peter.hutterer@redhat.com> 2.6.99.901-3.20120103git965338e9d | ||||||
| - Add mtdev as dependency | - Add mtdev as dependency | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user