xserver-xorg-input-evdev: Changes to 'debian-unstable'
10-evdev.conf | 40 ++
Makefile.am | 1
configure.ac | 21 -
debian/changelog | 8
debian/control | 2
debian/xserver-xorg-input-evdev-udeb.install | 1
debian/xserver-xorg-input-evdev.install | 1
man/evdev.man | 6
src/emuThird.c | 10
src/emuWheel.c | 2
src/evdev.c | 501 +++++++++++++--------------
src/evdev.h | 32 -
12 files changed, 328 insertions(+), 297 deletions(-)
New commits:
commit d9dd48adfa26b576c42d223448b55143671d4d5b
Author: Timo Aaltonen <tjaalton@debian.org>
Date: Wed Jan 27 15:48:24 2016 +0200
release to unstable
diff --git a/debian/changelog b/debian/changelog
index 06adf38..c640633 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,10 +1,10 @@
-xserver-xorg-input-evdev (1:2.10.1-1) UNRELEASED; urgency=medium
+xserver-xorg-input-evdev (1:2.10.1-1) unstable; urgency=medium
* New upstream release.
* control, install: Ship 10-evdev.conf with the driver,
breaks/replaces server << 1.18.0-1.
- -- Timo Aaltonen <tjaalton@debian.org> Mon, 18 Jan 2016 14:40:32 +0200
+ -- Timo Aaltonen <tjaalton@debian.org> Wed, 27 Jan 2016 15:47:54 +0200
xserver-xorg-input-evdev (1:2.9.2-1) unstable; urgency=medium
commit 0873ef6e22932959c8757a38fe938c88477446b2
Author: Timo Aaltonen <tjaalton@debian.org>
Date: Wed Jan 20 12:57:01 2016 +0200
add xserver epoch to Breaks/Replaces
diff --git a/debian/control b/debian/control
index b00c181..2196891 100644
--- a/debian/control
+++ b/debian/control
@@ -30,8 +30,8 @@ Depends:
${xinpdriver:Depends},
Provides:
${xinpdriver:Provides}
-Breaks: xserver-xorg-core (<< 1.18.0-1)
-Replaces: xserver-xorg-core (<< 1.18.0-1)
+Breaks: xserver-xorg-core (<< 2:1.18.0-1)
+Replaces: xserver-xorg-core (<< 2:1.18.0-1)
Description: X.Org X server -- evdev input driver
This package provides the driver for input devices using evdev, the Linux
kernel's event delivery mechanism. This driver allows for multiple keyboards
commit ca013742a622e8385938bc23547bc605eac75add
Author: Timo Aaltonen <tjaalton@debian.org>
Date: Mon Jan 18 14:54:13 2016 +0200
control, install: Ship 10-evdev.conf with the driver, breaks/replaces server << 1.18.0-1.
diff --git a/debian/changelog b/debian/changelog
index 68a973d..06adf38 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,8 @@
xserver-xorg-input-evdev (1:2.10.1-1) UNRELEASED; urgency=medium
* New upstream release.
+ * control, install: Ship 10-evdev.conf with the driver,
+ breaks/replaces server << 1.18.0-1.
-- Timo Aaltonen <tjaalton@debian.org> Mon, 18 Jan 2016 14:40:32 +0200
diff --git a/debian/control b/debian/control
index 1411a8d..b00c181 100644
--- a/debian/control
+++ b/debian/control
@@ -30,6 +30,8 @@ Depends:
${xinpdriver:Depends},
Provides:
${xinpdriver:Provides}
+Breaks: xserver-xorg-core (<< 1.18.0-1)
+Replaces: xserver-xorg-core (<< 1.18.0-1)
Description: X.Org X server -- evdev input driver
This package provides the driver for input devices using evdev, the Linux
kernel's event delivery mechanism. This driver allows for multiple keyboards
diff --git a/debian/xserver-xorg-input-evdev-udeb.install b/debian/xserver-xorg-input-evdev-udeb.install
index 4ac2576..2044bb5 100644
--- a/debian/xserver-xorg-input-evdev-udeb.install
+++ b/debian/xserver-xorg-input-evdev-udeb.install
@@ -1 +1,2 @@
usr/lib/xorg/modules/input/*.so
+usr/share/X11/xorg.conf.d/10-evdev.conf
diff --git a/debian/xserver-xorg-input-evdev.install b/debian/xserver-xorg-input-evdev.install
index 97e3c20..e393ea7 100644
--- a/debian/xserver-xorg-input-evdev.install
+++ b/debian/xserver-xorg-input-evdev.install
@@ -1,2 +1,3 @@
usr/lib/xorg/modules/input/*.so
usr/share/man
+usr/share/X11/xorg.conf.d/10-evdev.conf
commit 479d37f0768947688ffc98ff32e8c3c884d3ea16
Author: Timo Aaltonen <tjaalton@debian.org>
Date: Mon Jan 18 14:47:41 2016 +0200
update the changelog
diff --git a/debian/changelog b/debian/changelog
index 81c35d2..68a973d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+xserver-xorg-input-evdev (1:2.10.1-1) UNRELEASED; urgency=medium
+
+ * New upstream release.
+
+ -- Timo Aaltonen <tjaalton@debian.org> Mon, 18 Jan 2016 14:40:32 +0200
+
xserver-xorg-input-evdev (1:2.9.2-1) unstable; urgency=medium
* New upstream release.
commit 6a3beab6137b262fc847093ed5fa51ff70df6a21
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Fri Jan 8 15:11:59 2016 +1000
evdev 2.10.1
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
diff --git a/configure.ac b/configure.ac
index cc60ce7..3fe2012 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
# Initialize Autoconf
AC_PREREQ([2.60])
AC_INIT([xf86-input-evdev],
- [2.10.0],
+ [2.10.1],
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
[xf86-input-evdev])
AC_CONFIG_SRCDIR([Makefile.am])
commit d7e61a7074b802b49f57549530b289bbaa0a4855
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Tue Nov 10 14:35:51 2015 +1000
Only map x and y to axes 0 and 1
The Logitech G600 has one device with all axes north of ABS_MISC. The current
code assigns ABS_MISC as first axis to map to axis 0, i.e. x. On button press,
one node sends the BTN_LEFT but the other node sends an ABS_MISC with a 1 0
value. ABS_MISC is mapped to axis 0, this moves the pointer to (0, y) on
every button click.
Avoid this by simply mapping any axis other than x/y to at least axis 3, and
make sure we only override the MT 0/1 axes when we actually have MT axes.
https://bugs.freedesktop.org/show_bug.cgi?id=92856
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Keith Packard <keithp@keithp.com>
diff --git a/src/evdev.c b/src/evdev.c
index 17d9d61..3176660 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -1377,7 +1377,7 @@ EvdevAddAbsValuatorClass(DeviceIntPtr device, int num_scroll_axes)
}
atoms = malloc((pEvdev->num_vals + num_mt_axes) * sizeof(Atom));
- i = 0;
+ i = 2;
for (axis = ABS_X; i < MAX_VALUATORS && axis <= ABS_MAX; axis++) {
int j;
pEvdev->abs_axis_map[axis] = -1;
@@ -1385,9 +1385,14 @@ EvdevAddAbsValuatorClass(DeviceIntPtr device, int num_scroll_axes)
is_blacklisted_axis(axis))
continue;
- mapping = i;
+ if (axis == ABS_X)
+ mapping = 0;
+ else if (axis == ABS_Y)
+ mapping = 1;
+ else
+ mapping = i;
- for (j = 0; j < ArrayLength(mt_axis_mappings); j++)
+ for (j = 0; !pEvdev->fake_mt && j < ArrayLength(mt_axis_mappings); j++)
{
if (mt_axis_mappings[j].code == axis)
mt_axis_mappings[j].mapping = mapping;
commit 01e7ac48546d4534fa420ea1873214e738ea125d
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Wed Oct 28 14:28:20 2015 +1000
evdev 2.10.0
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
diff --git a/configure.ac b/configure.ac
index f6fd2e4..cc60ce7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
# Initialize Autoconf
AC_PREREQ([2.60])
AC_INIT([xf86-input-evdev],
- [2.9.99],
+ [2.10.0],
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
[xf86-input-evdev])
AC_CONFIG_SRCDIR([Makefile.am])
commit 034be31159f22ce28d84994d541a45ee44963fd8
Author: Thomas Hindoe Paaboel Andersen <phomes@gmail.com>
Date: Tue Jan 20 00:44:40 2015 +0100
Add "Resolution" option for mice to the evdev driver
It can be used to scale the resolution of a mouse to that of a 1000 DPI
mouse. This can be useful to make high resolution mice less sensitive
without turning off acceleration. The target of 1000 DPI is used as the
same default is used in libinput. If the option is not set no scaling
will be done.
https://bugs.freedesktop.org/show_bug.cgi?id=88134
Signed-off-by: Thomas Hindoe Paaboel Andersen <phomes@gmail.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
diff --git a/man/evdev.man b/man/evdev.man
index 06613fc..e70ae1f 100644
--- a/man/evdev.man
+++ b/man/evdev.man
@@ -238,6 +238,12 @@ Default: "1". Property: "Evdev Scrolling Distance".
.BI "Option \*qDialDelta\*q \*q" integer \*q
The amount of motion considered one unit of turning the dial. Default: "1".
Property: "Evdev Scrolling Distance".
+.TP 7
+.BI "Option \*qResolution\*q \*q" integer \*q
+Sets the resolution of the device in dots per inch. The resolution is used
+to scale relative motion events from mouse devices to 1000 DPI resolution. This
+can be used to make high resolution mice less sensitive without turning off
+acceleration. If set to 0 no scaling will be performed. Default: "0".
.SH SUPPORTED PROPERTIES
The following properties are provided by the
diff --git a/src/emuThird.c b/src/emuThird.c
index 7461767..5f14d33 100644
--- a/src/emuThird.c
+++ b/src/emuThird.c
@@ -229,8 +229,8 @@ Evdev3BEmuProcessAbsMotion(InputInfoPtr pInfo, ValuatorMask *vals)
{
if (valuator_mask_isset(vals, axis))
{
- int delta = valuator_mask_get(vals, axis) - emu3B->startpos[axis];
- if (abs(delta) > emu3B->threshold)
+ double delta = valuator_mask_get_double(vals, axis) - emu3B->startpos[axis];
+ if (fabs(delta) > emu3B->threshold)
cancel = TRUE;
}
axis++;
@@ -248,7 +248,7 @@ Evdev3BEmuProcessAbsMotion(InputInfoPtr pInfo, ValuatorMask *vals)
* emulation.
*/
void
-Evdev3BEmuProcessRelMotion(InputInfoPtr pInfo, int dx, int dy)
+Evdev3BEmuProcessRelMotion(InputInfoPtr pInfo, double dx, double dy)
{
EvdevPtr pEvdev = pInfo->private;
struct emulate3B *emu3B = &pEvdev->emulate3B;
@@ -260,8 +260,8 @@ Evdev3BEmuProcessRelMotion(InputInfoPtr pInfo, int dx, int dy)
emu3B->delta[1] += dy;
emu3B->flags |= EVDEV_RELATIVE_EVENTS;
- if (abs(emu3B->delta[0]) > emu3B->threshold ||
- abs(emu3B->delta[1]) > emu3B->threshold)
+ if (fabs(emu3B->delta[0]) > emu3B->threshold ||
+ fabs(emu3B->delta[1]) > emu3B->threshold)
{
Evdev3BEmuPostButtonEvent(pInfo, 1, BUTTON_PRESS);
Evdev3BCancel(pInfo);
diff --git a/src/evdev.c b/src/evdev.c
index da25b56..17d9d61 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -25,6 +25,7 @@
* Adam Jackson (ajax@redhat.com)
* Peter Hutterer (peter.hutterer@redhat.com)
* Oliver McFadden (oliver.mcfadden@nokia.com)
+ * Thomas H.P. Andersen (phomes@gmail.com)
*/
#ifdef HAVE_CONFIG_H
@@ -432,31 +433,36 @@ EvdevProcessValuators(InputInfoPtr pInfo)
/* Apply transformations on relative coordinates */
if (pEvdev->rel_queued) {
- int deltaX = 0, deltaY = 0;
+ double deltaX = 0, deltaY = 0;
if (valuator_mask_isset(pEvdev->rel_vals, REL_X))
- deltaX = valuator_mask_get(pEvdev->rel_vals, REL_X);
+ deltaX = valuator_mask_get_double(pEvdev->rel_vals, REL_X);
if (valuator_mask_isset(pEvdev->rel_vals, REL_Y))
- deltaY = valuator_mask_get(pEvdev->rel_vals, REL_Y);
+ deltaY = valuator_mask_get_double(pEvdev->rel_vals, REL_Y);
if (pEvdev->swap_axes) {
- int tmp = deltaX;
+ double tmp = deltaX;
deltaX = deltaY;
deltaY = tmp;
}
+ if (pEvdev->resolution > 0) {
+ deltaX *= DEFAULT_MOUSE_DPI / pEvdev->resolution;
+ deltaY *= DEFAULT_MOUSE_DPI / pEvdev->resolution;
+ }
+
if (pEvdev->invert_x)
deltaX *= -1;
if (pEvdev->invert_y)
deltaY *= -1;
if (deltaX)
- valuator_mask_set(pEvdev->rel_vals, REL_X, deltaX);
+ valuator_mask_set_double(pEvdev->rel_vals, REL_X, deltaX);
else
valuator_mask_unset(pEvdev->rel_vals, REL_X);
if (deltaY)
- valuator_mask_set(pEvdev->rel_vals, REL_Y, deltaY);
+ valuator_mask_set_double(pEvdev->rel_vals, REL_Y, deltaY);
else
valuator_mask_unset(pEvdev->rel_vals, REL_Y);
@@ -2293,6 +2299,12 @@ EvdevProbe(InputInfoPtr pInfo)
pEvdev->invert_y = xf86SetBoolOption(pInfo->options, "InvertY", FALSE);
pEvdev->swap_axes = xf86SetBoolOption(pInfo->options, "SwapAxes", FALSE);
+ pEvdev->resolution = xf86SetIntOption(pInfo->options, "Resolution", 0);
+ if (pEvdev->resolution < 0) {
+ xf86IDrvMsg(pInfo, X_ERROR, "Resolution must be a positive number");
+ pEvdev->resolution = 0;
+ }
+
str = xf86CheckStrOption(pInfo->options, "Calibration", NULL);
if (str) {
num_calibration = sscanf(str, "%d %d %d %d",
diff --git a/src/evdev.h b/src/evdev.h
index 0f71d78..4d44d2b 100644
--- a/src/evdev.h
+++ b/src/evdev.h
@@ -97,6 +97,8 @@
/* Number of longs needed to hold the given number of bits */
#define NLONGS(x) (((x) + LONG_BITS - 1) / LONG_BITS)
+#define DEFAULT_MOUSE_DPI 1000.0
+
/* Function key mode */
enum fkeymode {
FKEYMODE_UNKNOWN = 0,
@@ -170,6 +172,7 @@ typedef struct {
BOOL swap_axes;
BOOL invert_x;
BOOL invert_y;
+ int resolution;
unsigned int abs_queued, rel_queued, prox_queued;
@@ -191,7 +194,7 @@ typedef struct {
int button; /* phys button to emit */
int threshold; /* move threshold in dev coords */
OsTimerPtr timer;
- int delta[2]; /* delta x/y, accumulating */
+ double delta[2]; /* delta x/y, accumulating */
int startpos[2]; /* starting pos for abs devices */
int flags; /* remember if we had rel or abs movement */
} emulate3B;
@@ -269,7 +272,7 @@ BOOL Evdev3BEmuFilterEvent(InputInfoPtr, int, BOOL);
void Evdev3BEmuPreInit(InputInfoPtr pInfo);
void Evdev3BEmuOn(InputInfoPtr);
void Evdev3BEmuFinalize(InputInfoPtr);
-void Evdev3BEmuProcessRelMotion(InputInfoPtr pInfo, int dx, int dy);
+void Evdev3BEmuProcessRelMotion(InputInfoPtr pInfo, double dx, double dy);
void Evdev3BEmuProcessAbsMotion(InputInfoPtr pInfo, ValuatorMask *vals);
/* Mouse Wheel emulation */
commit 66c997886424a20e92ce30fcfda46cbb5c7352ab
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Tue May 5 15:34:07 2015 +1000
Add the default evdev config
This used to be part of the server but now that we have two drivers doing the
same thing (libinput, evdev) shift the configuration defaults to the driver.
This way you get what you install.
https://bugs.freedesktop.org/show_bug.cgi?id=89023
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
diff --git a/10-evdev.conf b/10-evdev.conf
new file mode 100644
index 0000000..cc83ab2
--- /dev/null
+++ b/10-evdev.conf
@@ -0,0 +1,40 @@
+#
+# Catch-all evdev loader for udev-based systems
+# We don't simply match on any device since that also adds accelerometers
+# and other devices that we don't really want to use. The list below
+# matches everything but joysticks.
+
+Section "InputClass"
+ Identifier "evdev pointer catchall"
+ MatchIsPointer "on"
+ MatchDevicePath "/dev/input/event*"
+ Driver "evdev"
+EndSection
+
+Section "InputClass"
+ Identifier "evdev keyboard catchall"
+ MatchIsKeyboard "on"
+ MatchDevicePath "/dev/input/event*"
+ Driver "evdev"
+EndSection
+
+Section "InputClass"
+ Identifier "evdev touchpad catchall"
+ MatchIsTouchpad "on"
+ MatchDevicePath "/dev/input/event*"
+ Driver "evdev"
+EndSection
+
+Section "InputClass"
+ Identifier "evdev tablet catchall"
+ MatchIsTablet "on"
+ MatchDevicePath "/dev/input/event*"
+ Driver "evdev"
+EndSection
+
+Section "InputClass"
+ Identifier "evdev touchscreen catchall"
+ MatchIsTouchscreen "on"
+ MatchDevicePath "/dev/input/event*"
+ Driver "evdev"
+EndSection
diff --git a/Makefile.am b/Makefile.am
index 00c7940..1cc3ea6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -28,6 +28,7 @@ MAINTAINERCLEANFILES = ChangeLog INSTALL
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = xorg-evdev.pc
+dist_xorgconf_DATA = 10-evdev.conf
.PHONY: ChangeLog INSTALL
diff --git a/configure.ac b/configure.ac
index e0d480a..f6fd2e4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -59,6 +59,13 @@ AC_ARG_WITH(xorg-module-dir,
inputdir=${moduledir}/input
AC_SUBST(inputdir)
+AC_ARG_WITH(xorg-conf-dir,
+ AC_HELP_STRING([--with-xorg-conf-dir=DIR],
+ [Default xorg.conf.d directory [[default=$prefix/share/X11/xorg.conf.d/]]]),
+ [xorgconfdir="$withval"],
+ [xorgconfdir="$prefix/share/X11/xorg.conf.d"])
+AC_SUBST(xorgconfdir)
+
# X Server SDK location is required to install evdev header files
# This location is also relayed in the xorg-evdev.pc file
sdkdir=`$PKG_CONFIG --variable=sdkdir xorg-server`
commit 0d3494eadfde7e8d30e1bae97cfa6b36e5128a11
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Fri Mar 27 11:41:50 2015 +1000
Bump to 2.9.99
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
diff --git a/configure.ac b/configure.ac
index 277358d..e0d480a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
# Initialize Autoconf
AC_PREREQ([2.60])
AC_INIT([xf86-input-evdev],
- [2.9.1],
+ [2.9.99],
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
[xf86-input-evdev])
AC_CONFIG_SRCDIR([Makefile.am])
commit 56a5e6716204916691a67082e3e6a1698df2061b
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Mon Mar 16 07:55:34 2015 +1000
Unconditionally require mtdev
Missing from 2c9f4f0380d
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
diff --git a/configure.ac b/configure.ac
index e53177e..277358d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -48,7 +48,7 @@ PKG_CHECK_MODULES(XORG, [xorg-server >= 1.12] xproto [inputproto >= 2.1.99.3])
PKG_CHECK_MODULES(UDEV, libudev)
PKG_CHECK_MODULES(LIBEVDEV, [libevdev >= 0.4])
-PKG_CHECK_MODULES(MTDEV, mtdev, HAVE_MTDEV="yes", HAVE_MTDEV="no")
+PKG_CHECK_MODULES(MTDEV, mtdev)
# Define a configure option for an alternate input module directory
AC_ARG_WITH(xorg-module-dir,
commit 74433f788acf41a43da54269eb1b73c407f3ceba
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Fri Mar 13 11:05:03 2015 +1000
Always check for a return value on creating a property
Mostly to make static analyzers happy
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
diff --git a/src/evdev.c b/src/evdev.c
index 360bbb8..da25b56 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -2828,6 +2828,9 @@ EvdevInitProperty(DeviceIntPtr dev)
strlen(XI_PROP_VIRTUAL_DEVICE), TRUE);
rc = XIChangeDeviceProperty(dev, prop_virtual, XA_INTEGER, 8,
PropModeReplace, 1, &virtual, FALSE);
+ if (rc != Success)
+ return;
+
XISetDevicePropertyDeletable(dev, prop_virtual, FALSE);
}
@@ -2900,8 +2903,11 @@ EvdevInitProperty(DeviceIntPtr dev)
}
EvdevInitAxesLabels(pEvdev, mode, num_axes, atoms);
- XIChangeDeviceProperty(dev, prop_axis_label, XA_ATOM, 32,
- PropModeReplace, num_axes, atoms, FALSE);
+ rc = XIChangeDeviceProperty(dev, prop_axis_label, XA_ATOM, 32,
+ PropModeReplace, num_axes, atoms, FALSE);
+ if (rc != Success)
+ return;
+
XISetDevicePropertyDeletable(dev, prop_axis_label, FALSE);
}
/* Button labelling */
@@ -2909,8 +2915,11 @@ EvdevInitProperty(DeviceIntPtr dev)
{
Atom atoms[EVDEV_MAXBUTTONS];
EvdevInitButtonLabels(pEvdev, EVDEV_MAXBUTTONS, atoms);
- XIChangeDeviceProperty(dev, prop_btn_label, XA_ATOM, 32,
- PropModeReplace, pEvdev->num_buttons, atoms, FALSE);
+ rc = XIChangeDeviceProperty(dev, prop_btn_label, XA_ATOM, 32,
+ PropModeReplace, pEvdev->num_buttons, atoms, FALSE);
+ if (rc != Success)
+ return;
+
XISetDevicePropertyDeletable(dev, prop_btn_label, FALSE);
}
@@ -2922,8 +2931,11 @@ EvdevInitProperty(DeviceIntPtr dev)
};
prop_scroll_dist = MakeAtom(EVDEV_PROP_SCROLL_DISTANCE,
strlen(EVDEV_PROP_SCROLL_DISTANCE), TRUE);
- XIChangeDeviceProperty(dev, prop_scroll_dist, XA_INTEGER, 32,
- PropModeReplace, 3, smooth_scroll_values, FALSE);
+ rc = XIChangeDeviceProperty(dev, prop_scroll_dist, XA_INTEGER, 32,
+ PropModeReplace, 3, smooth_scroll_values, FALSE);
+ if (rc != Success)
+ return;
+
XISetDevicePropertyDeletable(dev, prop_scroll_dist, FALSE);
}
commit fdc33809de2751c164183df2310a71732be579f3
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Fri Mar 13 10:58:01 2015 +1000
Invert a condition to reduce nesting
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
diff --git a/src/evdev.c b/src/evdev.c
index 639e4a1..360bbb8 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -2759,22 +2759,22 @@ static void EvdevInitButtonLabels(EvdevPtr pEvdev, int natoms, Atom *atoms)
for (button = BTN_MISC; button < BTN_JOYSTICK; button++)
{
- if (libevdev_has_event_code(pEvdev->dev, EV_KEY, button))
- {
- int group = (button % 0x100)/16;
- int idx = button - ((button/16) * 16);
+ int group = (button % 0x100)/16;
+ int idx = button - ((button/16) * 16);
+
+ if (!libevdev_has_event_code(pEvdev->dev, EV_KEY, button))
+ continue;
- if (!btn_labels[group][idx])
- continue;
+ if (!btn_labels[group][idx])
+ continue;
- atom = XIGetKnownProperty(btn_labels[group][idx]);
- if (!atom)
- continue;
+ atom = XIGetKnownProperty(btn_labels[group][idx]);
+ if (!atom)
+ continue;
- /* Props are 0-indexed, button numbers start with 1 */
- bmap = EvdevUtilButtonEventToButtonNumber(pEvdev, button) - 1;
- atoms[bmap] = atom;
- }
+ /* Props are 0-indexed, button numbers start with 1 */
+ bmap = EvdevUtilButtonEventToButtonNumber(pEvdev, button) - 1;
+ atoms[bmap] = atom;
}
/* wheel buttons, hardcoded anyway */
commit 38e107a39fb4a0b630ee5adb5870c91dbc27abde
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Wed Mar 11 14:58:04 2015 +1000
Disable axis faking and MT event processing on fake MT devices
This effectively disables all axes >= ABS_MT_SLOT on those devices. But at
least the device comes up without an error and it didn't work correctly
beforehand anyway.
https://bugs.freedesktop.org/show_bug.cgi?id=89473
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
diff --git a/src/evdev.c b/src/evdev.c
index 7ce7405..639e4a1 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -696,6 +696,9 @@ EvdevProcessTouchEvent(InputInfoPtr pInfo, struct input_event *ev)
!libevdev_has_event_code(pEvdev->dev, EV_ABS, ABS_MT_SLOT))
return;
+ if (pEvdev->fake_mt)
+ return;
+
if (ev->code == ABS_MT_SLOT) {
EvdevProcessTouch(pInfo);
if (ev->value >= num_slots(pEvdev) ) {
@@ -1174,6 +1177,9 @@ EvdevAddFakeSingleTouchAxes(InputInfoPtr pInfo)
int num_axes = 0;
int i;
+ if (pEvdev->fake_mt)
+ return 0;
+
/* Android drivers often have ABS_MT_POSITION_X but not ABS_X.
Loop over the MT->legacy axis table and add fake axes. */
for (i = 0; i < ArrayLength(mt_axis_mappings); i++)
@@ -1207,6 +1213,9 @@ EvdevCountMTAxes(EvdevPtr pEvdev, int *num_mt_axes_total,
{
int axis;
+ if (pEvdev->fake_mt)
+ return;
+
/* Absolute multitouch axes: adjust mapping and axes counts. */
for (axis = ABS_MT_SLOT; axis < ABS_MAX; axis++)
{
@@ -2199,6 +2208,10 @@ EvdevProbe(InputInfoPtr pInfo)
}
}
+ if (libevdev_has_event_code(pEvdev->dev, EV_ABS, ABS_MT_SLOT) &&
+ libevdev_get_num_slots(pEvdev->dev) == -1)
+ pEvdev->fake_mt = TRUE;
+
if (ignore_abs && has_abs_axes)
{
xf86IDrvMsg(pInfo, X_INFO, "Absolute axes present but ignored.\n");
@@ -2220,6 +2233,8 @@ EvdevProbe(InputInfoPtr pInfo)
pEvdev->flags |= EVDEV_BUTTON_EVENTS;
}
}
+ if (pEvdev->fake_mt)
+ xf86IDrvMsg(pInfo, X_PROBED, "Fake MT device detected\n");
}
if ((libevdev_has_event_code(pEvdev->dev, EV_ABS, ABS_X) &&
diff --git a/src/evdev.h b/src/evdev.h
index 4aa7652..0f71d78 100644
--- a/src/evdev.h
+++ b/src/evdev.h
@@ -161,6 +161,7 @@ typedef struct {
enum SlotState state;
} *slots;
struct mtdev *mtdev;
+ BOOL fake_mt;
int flags;
int in_proximity; /* device in proximity */
commit b6176cff5a3fbccc3708721958e9fb346518f57e
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Wed Mar 11 13:44:28 2015 +1000
Invert two conditions to reduce nesting
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
diff --git a/src/evdev.c b/src/evdev.c
index dacd3e3..7ce7405 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -1180,22 +1180,22 @@ EvdevAddFakeSingleTouchAxes(InputInfoPtr pInfo)
{
int mt_code = mt_axis_mappings[i].mt_code;
int code = mt_axis_mappings[i].code;
+ const struct input_absinfo* abs;
- if (libevdev_has_event_code(pEvdev->dev, EV_ABS, mt_code) &&
- !libevdev_has_event_code(pEvdev->dev, EV_ABS, code))
+ if (!libevdev_has_event_code(pEvdev->dev, EV_ABS, mt_code) ||
+ libevdev_has_event_code(pEvdev->dev, EV_ABS, code))
+ continue;
+
+ abs = libevdev_get_abs_info(pEvdev->dev, mt_code);
+ if (libevdev_enable_event_code(pEvdev->dev, EV_ABS, code, abs))
{
- const struct input_absinfo* abs;
- abs = libevdev_get_abs_info(pEvdev->dev, mt_code);
- if (libevdev_enable_event_code(pEvdev->dev, EV_ABS, code, abs))
- {
- xf86IDrvMsg(pInfo, X_ERROR, "Failed to fake axis %s.\n",
- libevdev_event_code_get_name(EV_ABS, code));
- return -1;
- }
- xf86IDrvMsg(pInfo, X_INFO, "Faking axis %s.\n",
+ xf86IDrvMsg(pInfo, X_ERROR, "Failed to fake axis %s.\n",
libevdev_event_code_get_name(EV_ABS, code));
- num_axes++;
+ return -1;
}
+ xf86IDrvMsg(pInfo, X_INFO, "Faking axis %s.\n",
+ libevdev_event_code_get_name(EV_ABS, code));
+ num_axes++;
}
return num_axes;
@@ -1210,30 +1210,30 @@ EvdevCountMTAxes(EvdevPtr pEvdev, int *num_mt_axes_total,
/* Absolute multitouch axes: adjust mapping and axes counts. */
for (axis = ABS_MT_SLOT; axis < ABS_MAX; axis++)
{
- if (libevdev_has_event_code(pEvdev->dev, EV_ABS, axis))
- {
- int j;
- Bool skip = FALSE;
+ int j;
+ Bool skip = FALSE;
- /* Setup mapping if axis is in MT->legacy axis table. */
- for (j = 0; j < ArrayLength(mt_axis_mappings); j++)
- {
- if (mt_axis_mappings[j].mt_code == axis &&
- libevdev_has_event_code(pEvdev->dev, EV_ABS, mt_axis_mappings[j].code))
- {
- mt_axis_mappings[j].needs_mapping = TRUE;
- skip = TRUE;
- }
- }
+ if (!libevdev_has_event_code(pEvdev->dev, EV_ABS, axis))
+ continue;
- if (!is_blacklisted_axis(axis))
+ /* Setup mapping if axis is in MT->legacy axis table. */
+ for (j = 0; j < ArrayLength(mt_axis_mappings); j++)
+ {
+ if (mt_axis_mappings[j].mt_code == axis &&
+ libevdev_has_event_code(pEvdev->dev, EV_ABS, mt_axis_mappings[j].code))
{
- (*num_mt_axes_total)++;
- if (!skip)
- (*num_mt_axes)++;
+ mt_axis_mappings[j].needs_mapping = TRUE;
+ skip = TRUE;
}
- (*num_axes)--;
}
+
+ if (!is_blacklisted_axis(axis))
+ {
+ (*num_mt_axes_total)++;
+ if (!skip)
+ (*num_mt_axes)++;
+ }
+ (*num_axes)--;
}
}
commit 37afebfb67609f04f9c1cdea983e7006ee2d59e5
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Wed Mar 11 13:47:32 2015 +1000
Factor out MT axis counting into a separate function
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
diff --git a/src/evdev.c b/src/evdev.c
index 1b7b7fd..dacd3e3 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -1201,6 +1201,42 @@ EvdevAddFakeSingleTouchAxes(InputInfoPtr pInfo)
return num_axes;
}
+static void
+EvdevCountMTAxes(EvdevPtr pEvdev, int *num_mt_axes_total,
+ int *num_mt_axes, int *num_axes)
+{
+ int axis;
+
+ /* Absolute multitouch axes: adjust mapping and axes counts. */
+ for (axis = ABS_MT_SLOT; axis < ABS_MAX; axis++)
+ {
+ if (libevdev_has_event_code(pEvdev->dev, EV_ABS, axis))
+ {
+ int j;
+ Bool skip = FALSE;
+
+ /* Setup mapping if axis is in MT->legacy axis table. */
+ for (j = 0; j < ArrayLength(mt_axis_mappings); j++)
+ {
+ if (mt_axis_mappings[j].mt_code == axis &&
+ libevdev_has_event_code(pEvdev->dev, EV_ABS, mt_axis_mappings[j].code))
+ {
+ mt_axis_mappings[j].needs_mapping = TRUE;
+ skip = TRUE;
+ }
+ }
+
+ if (!is_blacklisted_axis(axis))
+ {
+ (*num_mt_axes_total)++;
+ if (!skip)
+ (*num_mt_axes)++;
+ }
+ (*num_axes)--;
+ }
+ }
+}
+
static int
EvdevAddAbsValuatorClass(DeviceIntPtr device, int num_scroll_axes)
{
@@ -1235,34 +1271,7 @@ EvdevAddAbsValuatorClass(DeviceIntPtr device, int num_scroll_axes)
num_axes += num_faked_axes;
- /* Absolute multitouch axes: adjust mapping and axes counts. */
- for (axis = ABS_MT_SLOT; axis < ABS_MAX; axis++)
- {
- if (libevdev_has_event_code(pEvdev->dev, EV_ABS, axis))
- {
- int j;
- Bool skip = FALSE;
-
- /* Setup mapping if axis is in MT->legacy axis table. */
- for (j = 0; j < ArrayLength(mt_axis_mappings); j++)
- {
- if (mt_axis_mappings[j].mt_code == axis &&
- libevdev_has_event_code(pEvdev->dev, EV_ABS, mt_axis_mappings[j].code))
- {
- mt_axis_mappings[j].needs_mapping = TRUE;
- skip = TRUE;
- }
- }
-
- if (!is_blacklisted_axis(axis))
- {
- num_mt_axes_total++;
- if (!skip)
- num_mt_axes++;
- }
- num_axes--;
- }
- }
+ EvdevCountMTAxes(pEvdev, &num_mt_axes_total, &num_mt_axes, &num_axes);
/* Panic if, after faking ABS_X etc, we still only have mt-axes. */
if (num_axes == 0 && num_mt_axes > 0) {
commit 5b5ae1786cb4b2ea35720bacf18f252223b2b2ec
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Wed Mar 11 13:29:19 2015 +1000
Split android axis simulation into a helper function
No functional changes
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
diff --git a/src/evdev.c b/src/evdev.c
index af691f5..1b7b7fd 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -1167,6 +1167,39 @@ is_blacklisted_axis(int axis)
}
}
+static int
+EvdevAddFakeSingleTouchAxes(InputInfoPtr pInfo)
+{
+ EvdevPtr pEvdev = pInfo->private;
+ int num_axes = 0;
+ int i;
+
+ /* Android drivers often have ABS_MT_POSITION_X but not ABS_X.
+ Loop over the MT->legacy axis table and add fake axes. */
+ for (i = 0; i < ArrayLength(mt_axis_mappings); i++)
+ {
+ int mt_code = mt_axis_mappings[i].mt_code;
+ int code = mt_axis_mappings[i].code;
+
+ if (libevdev_has_event_code(pEvdev->dev, EV_ABS, mt_code) &&
+ !libevdev_has_event_code(pEvdev->dev, EV_ABS, code))
+ {
+ const struct input_absinfo* abs;
+ abs = libevdev_get_abs_info(pEvdev->dev, mt_code);
+ if (libevdev_enable_event_code(pEvdev->dev, EV_ABS, code, abs))
+ {
+ xf86IDrvMsg(pInfo, X_ERROR, "Failed to fake axis %s.\n",
+ libevdev_event_code_get_name(EV_ABS, code));
+ return -1;
+ }
+ xf86IDrvMsg(pInfo, X_INFO, "Faking axis %s.\n",
+ libevdev_event_code_get_name(EV_ABS, code));
+ num_axes++;
+ }
+ }
+
+ return num_axes;
+}
static int
EvdevAddAbsValuatorClass(DeviceIntPtr device, int num_scroll_axes)
@@ -1178,6 +1211,7 @@ EvdevAddAbsValuatorClass(DeviceIntPtr device, int num_scroll_axes)
int num_mt_axes = 0, /* number of MT-only axes */
num_mt_axes_total = 0; /* total number of MT axes, including
double-counted ones, excluding blacklisted */
+ int num_faked_axes;
Atom *atoms;
int mapping = 0;
@@ -1195,28 +1229,11 @@ EvdevAddAbsValuatorClass(DeviceIntPtr device, int num_scroll_axes)
if (num_axes < 1)
goto out;
- /* Android drivers often have ABS_MT_POSITION_X but not ABS_X.
- Loop over the MT->legacy axis table and add fake axes. */
- for (i = 0; i < ArrayLength(mt_axis_mappings); i++)
- {
Reply to: