Compare commits

..

3 Commits

Author SHA1 Message Date
Peter Hutterer
51575b60b1 evdev 2.8.2
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2013-10-07 09:23:09 +11:00
Peter Hutterer
f285567d37 Write a SYN_REPORT after the last LED
When writing LED values to the device, append a SYN_REPORT to the list to
ensure other clients are updated immediately. Otherwise, the LED events
will be queued and not sent to other clients until the next input event
arrives.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
(cherry picked from commit 27926b3763)
2013-10-07 09:22:50 +11:00
Peter De Wachter
af1d085877 Map REL_DIAL to vertical scrolling
This makes the absolute axis codepath behave the same as the relative axis
path.

Signed-off-by: Peter De Wachter <pdewacht@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 54a3120e33)
2013-10-07 09:22:48 +11:00
11 changed files with 680 additions and 799 deletions

View File

@@ -1,40 +0,0 @@
#
# 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

View File

@@ -28,7 +28,6 @@ MAINTAINERCLEANFILES = ChangeLog INSTALL
pkgconfigdir = $(libdir)/pkgconfig pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = xorg-evdev.pc pkgconfig_DATA = xorg-evdev.pc
dist_xorgconf_DATA = 10-evdev.conf
.PHONY: ChangeLog INSTALL .PHONY: ChangeLog INSTALL

View File

@@ -23,7 +23,7 @@
# Initialize Autoconf # Initialize Autoconf
AC_PREREQ([2.60]) AC_PREREQ([2.60])
AC_INIT([xf86-input-evdev], AC_INIT([xf86-input-evdev],
[2.10.2], [2.8.2],
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
[xf86-input-evdev]) [xf86-input-evdev])
AC_CONFIG_SRCDIR([Makefile.am]) AC_CONFIG_SRCDIR([Makefile.am])
@@ -44,11 +44,18 @@ XORG_MACROS_VERSION(1.8)
XORG_DEFAULT_OPTIONS XORG_DEFAULT_OPTIONS
# Obtain compiler/linker options from server and required extensions # Obtain compiler/linker options from server and required extensions
PKG_CHECK_MODULES(XORG, [xorg-server >= 1.12] xproto [inputproto >= 2.1.99.3]) PKG_CHECK_MODULES(XORG, [xorg-server >= 1.10] xproto inputproto)
PKG_CHECK_MODULES(UDEV, libudev) PKG_CHECK_MODULES(UDEV, libudev)
PKG_CHECK_MODULES(LIBEVDEV, [libevdev >= 0.4]) PKG_CHECK_MODULES(XI22, [inputproto >= 2.1.99.3] [xorg-server >= 1.11.99.901], HAVE_XI22="yes", HAVE_XI22="no")
PKG_CHECK_MODULES(MTDEV, mtdev)
if test "x$HAVE_XI22" = xyes; then
# Obtain compiler/linker options for mtdev
PKG_CHECK_MODULES(MTDEV, mtdev, HAVE_MTDEV="yes", HAVE_MTDEV="no")
fi
if test "x$HAVE_XI22" = xyes && test "x$HAVE_MTDEV" = xyes; then
AC_DEFINE(MULTITOUCH, 1, [XI2.2 available])
fi
# Define a configure option for an alternate input module directory # Define a configure option for an alternate input module directory
AC_ARG_WITH(xorg-module-dir, AC_ARG_WITH(xorg-module-dir,
@@ -59,13 +66,6 @@ AC_ARG_WITH(xorg-module-dir,
inputdir=${moduledir}/input inputdir=${moduledir}/input
AC_SUBST(inputdir) 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 # X Server SDK location is required to install evdev header files
# This location is also relayed in the xorg-evdev.pc file # This location is also relayed in the xorg-evdev.pc file
sdkdir=`$PKG_CONFIG --variable=sdkdir xorg-server` sdkdir=`$PKG_CONFIG --variable=sdkdir xorg-server`

View File

@@ -87,8 +87,4 @@
*/ */
#define EVDEV_PROP_FUNCTION_KEYS "Evdev Function Keys" #define EVDEV_PROP_FUNCTION_KEYS "Evdev Function Keys"
/* Smooth scroll */
/* INT32, 3 values (vertical, horizontal, dial) */
#define EVDEV_PROP_SCROLL_DISTANCE "Evdev Scrolling Distance"
#endif #endif

View File

@@ -125,19 +125,6 @@ Property: "Evdev Wheel Emulation Button".
Specifies how far (in pixels) the pointer must move to generate button Specifies how far (in pixels) the pointer must move to generate button
press/release events in wheel emulation mode. Default: 10. Property: "Evdev press/release events in wheel emulation mode. Default: 10. Property: "Evdev
Wheel Emulation Inertia". Wheel Emulation Inertia".
.IP
This value must be set for any device does not resemble a standard mouse.
Specifically, on absolute devices such as tablets the value should be set to
a reasonable fraction of the expected movement to avoid excess scroll events.
.IP
.B WARNING:
the name \*qinertia\*q is a misnomer. This option defines the distance
required to generate one scroll event similar to the
.B VertScrollDelta
and
.B HorizScrollDelta
options. It does not enable inertia in the
physical sense, scrolling stops immediately once the movement has stopped.
.TP 7 .TP 7
.BI "Option \*qEmulateWheelTimeout\*q \*q" integer \*q .BI "Option \*qEmulateWheelTimeout\*q \*q" integer \*q
Specifies the time in milliseconds the Specifies the time in milliseconds the
@@ -239,24 +226,6 @@ Specify the X Input 1.x type (see XListInputDevices(__libmansuffix__)).
There is rarely a need to use this option, evdev will guess the device type There is rarely a need to use this option, evdev will guess the device type
based on the device's capabilities. This option is provided for devices that based on the device's capabilities. This option is provided for devices that
need quirks. need quirks.
.TP 7
.BI "Option \*qVertScrollDelta\*q \*q" integer \*q
The amount of motion considered one unit of scrolling vertically.
Default: "1". Property: "Evdev Scrolling Distance".
.TP 7
.BI "Option \*qHorizScrollDelta\*q \*q" integer \*q
The amount of motion considered one unit of scrolling horizontally.
Default: "1". Property: "Evdev Scrolling Distance".
.TP 7
.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 .SH SUPPORTED PROPERTIES
The following properties are provided by the The following properties are provided by the
@@ -297,9 +266,6 @@ value.
.TP 7 .TP 7
.BI "Evdev Wheel Emulation Timeout" .BI "Evdev Wheel Emulation Timeout"
1 16-bit positive value. 1 16-bit positive value.
.TP 7
.BI "Evdev Scrolling Distance"
3 32-bit values: vertical, horizontal and dial.
.SH AUTHORS .SH AUTHORS
Kristian Høgsberg, Peter Hutterer Kristian Høgsberg, Peter Hutterer

View File

@@ -26,11 +26,11 @@
# TODO: -nostdlib/-Bstatic/-lgcc platform magic, not installing the .a, etc. # TODO: -nostdlib/-Bstatic/-lgcc platform magic, not installing the .a, etc.
AM_CFLAGS = $(XORG_CFLAGS) $(CWARNFLAGS) AM_CFLAGS = $(XORG_CFLAGS) $(CWARNFLAGS)
AM_CPPFLAGS =-I$(top_srcdir)/include $(LIBEVDEV_CFLAGS) AM_CPPFLAGS =-I$(top_srcdir)/include
@DRIVER_NAME@_drv_la_LTLIBRARIES = @DRIVER_NAME@_drv.la @DRIVER_NAME@_drv_la_LTLIBRARIES = @DRIVER_NAME@_drv.la
@DRIVER_NAME@_drv_la_LDFLAGS = -module -avoid-version @DRIVER_NAME@_drv_la_LDFLAGS = -module -avoid-version
@DRIVER_NAME@_drv_la_LIBADD = $(MTDEV_LIBS) $(UDEV_LIBS) $(LIBEVDEV_LIBS) @DRIVER_NAME@_drv_la_LIBADD = $(MTDEV_LIBS) $(UDEV_LIBS)
@DRIVER_NAME@_drv_ladir = @inputdir@ @DRIVER_NAME@_drv_ladir = @inputdir@
@DRIVER_NAME@_drv_la_SOURCES = @DRIVER_NAME@.c \ @DRIVER_NAME@_drv_la_SOURCES = @DRIVER_NAME@.c \

View File

@@ -303,8 +303,7 @@ EvdevAppleInitProperty(DeviceIntPtr dev)
enum fkeymode fkeymode; enum fkeymode fkeymode;
if (!product_check(apple_keyboard_table, if (!product_check(apple_keyboard_table,
libevdev_get_id_vendor(pEvdev->dev), pEvdev->id_vendor, pEvdev->id_product))
libevdev_get_id_product(pEvdev->dev)))
return; return;
fkeymode = get_fnmode(); fkeymode = get_fnmode();

View File

@@ -229,8 +229,8 @@ Evdev3BEmuProcessAbsMotion(InputInfoPtr pInfo, ValuatorMask *vals)
{ {
if (valuator_mask_isset(vals, axis)) if (valuator_mask_isset(vals, axis))
{ {
double delta = valuator_mask_get_double(vals, axis) - emu3B->startpos[axis]; int delta = valuator_mask_get(vals, axis) - emu3B->startpos[axis];
if (fabs(delta) > emu3B->threshold) if (abs(delta) > emu3B->threshold)
cancel = TRUE; cancel = TRUE;
} }
axis++; axis++;
@@ -248,7 +248,7 @@ Evdev3BEmuProcessAbsMotion(InputInfoPtr pInfo, ValuatorMask *vals)
* emulation. * emulation.
*/ */
void void
Evdev3BEmuProcessRelMotion(InputInfoPtr pInfo, double dx, double dy) Evdev3BEmuProcessRelMotion(InputInfoPtr pInfo, int dx, int dy)
{ {
EvdevPtr pEvdev = pInfo->private; EvdevPtr pEvdev = pInfo->private;
struct emulate3B *emu3B = &pEvdev->emulate3B; struct emulate3B *emu3B = &pEvdev->emulate3B;
@@ -260,8 +260,8 @@ Evdev3BEmuProcessRelMotion(InputInfoPtr pInfo, double dx, double dy)
emu3B->delta[1] += dy; emu3B->delta[1] += dy;
emu3B->flags |= EVDEV_RELATIVE_EVENTS; emu3B->flags |= EVDEV_RELATIVE_EVENTS;
if (fabs(emu3B->delta[0]) > emu3B->threshold || if (abs(emu3B->delta[0]) > emu3B->threshold ||
fabs(emu3B->delta[1]) > emu3B->threshold) abs(emu3B->delta[1]) > emu3B->threshold)
{ {
Evdev3BEmuPostButtonEvent(pInfo, 1, BUTTON_PRESS); Evdev3BEmuPostButtonEvent(pInfo, 1, BUTTON_PRESS);
Evdev3BCancel(pInfo); Evdev3BCancel(pInfo);

View File

@@ -95,8 +95,9 @@ BOOL
EvdevWheelEmuFilterMotion(InputInfoPtr pInfo, struct input_event *pEv) EvdevWheelEmuFilterMotion(InputInfoPtr pInfo, struct input_event *pEv)
{ {
EvdevPtr pEvdev = (EvdevPtr)pInfo->private; EvdevPtr pEvdev = (EvdevPtr)pInfo->private;
WheelAxisPtr pAxis = NULL; WheelAxisPtr pAxis = NULL, pOtherAxis = NULL;
int value = pEv->value; int value = pEv->value;
int oldValue;
/* Has wheel emulation been configured to be enabled? */ /* Has wheel emulation been configured to be enabled? */
if (!pEvdev->emulateWheel.enabled) if (!pEvdev->emulateWheel.enabled)
@@ -114,15 +115,12 @@ EvdevWheelEmuFilterMotion(InputInfoPtr pInfo, struct input_event *pEv)
return TRUE; return TRUE;
} }
/* We don't want to intercept real mouse wheel events */
if(pEv->type == EV_ABS) { if(pEv->type == EV_ABS) {
int axis = pEvdev->abs_axis_map[pEv->code]; int axis = pEvdev->abs_axis_map[pEv->code];
int oldValue; oldValue = valuator_mask_get(pEvdev->vals, axis);
valuator_mask_set(pEvdev->vals, axis, value);
if (axis > -1 && valuator_mask_fetch(pEvdev->old_vals, axis, &oldValue)) { value -= oldValue; /* make value into a differential measurement */
valuator_mask_set(pEvdev->abs_vals, axis, value);
value -= oldValue; /* make value into a differential measurement */
} else
value = 0; /* avoid a jump on the first touch */
} }
switch(pEv->code) { switch(pEv->code) {
@@ -130,11 +128,13 @@ EvdevWheelEmuFilterMotion(InputInfoPtr pInfo, struct input_event *pEv)
/* ABS_X has the same value as REL_X, so this case catches both */ /* ABS_X has the same value as REL_X, so this case catches both */
case REL_X: case REL_X:
pAxis = &(pEvdev->emulateWheel.X); pAxis = &(pEvdev->emulateWheel.X);
pOtherAxis = &(pEvdev->emulateWheel.Y);
break; break;
/* ABS_Y has the same value as REL_Y, so this case catches both */ /* ABS_Y has the same value as REL_Y, so this case catches both */
case REL_Y: case REL_Y:
pAxis = &(pEvdev->emulateWheel.Y); pAxis = &(pEvdev->emulateWheel.Y);
pOtherAxis = &(pEvdev->emulateWheel.X);
break; break;
default: default:
@@ -142,10 +142,15 @@ EvdevWheelEmuFilterMotion(InputInfoPtr pInfo, struct input_event *pEv)
} }
/* If we found REL_X, REL_Y, ABS_X or ABS_Y then emulate a mouse /* If we found REL_X, REL_Y, ABS_X or ABS_Y then emulate a mouse
wheel. wheel. Reset the inertia of the other axis when a scroll event
was sent to avoid the buildup of erroneous scroll events if the
user doesn't move in a perfectly straight line.
*/ */
if (pAxis) if (pAxis)
EvdevWheelEmuInertia(pInfo, pAxis, value); {
if (EvdevWheelEmuInertia(pInfo, pAxis, value))
pOtherAxis->traveled_distance = 0;
}
/* Eat motion events while emulateWheel button pressed. */ /* Eat motion events while emulateWheel button pressed. */
return TRUE; return TRUE;

File diff suppressed because it is too large Load Diff

View File

@@ -43,9 +43,9 @@
#include <xf86_OSproc.h> #include <xf86_OSproc.h>
#include <xkbstr.h> #include <xkbstr.h>
#ifdef MULTITOUCH
#include <mtdev.h> #include <mtdev.h>
#endif
#include <libevdev/libevdev.h>
#ifndef EV_CNT /* linux 2.6.23 kernels and earlier lack _CNT defines */ #ifndef EV_CNT /* linux 2.6.23 kernels and earlier lack _CNT defines */
#define EV_CNT (EV_MAX+1) #define EV_CNT (EV_MAX+1)
@@ -63,6 +63,10 @@
#define LED_CNT (LED_MAX+1) #define LED_CNT (LED_MAX+1)
#endif #endif
#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 14
#define HAVE_SMOOTH_SCROLLING 1
#endif
#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 18 #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 18
#define LogMessageVerbSigSafe xf86MsgVerb #define LogMessageVerbSigSafe xf86MsgVerb
#endif #endif
@@ -97,8 +101,6 @@
/* Number of longs needed to hold the given number of bits */ /* Number of longs needed to hold the given number of bits */
#define NLONGS(x) (((x) + LONG_BITS - 1) / LONG_BITS) #define NLONGS(x) (((x) + LONG_BITS - 1) / LONG_BITS)
#define DEFAULT_MOUSE_DPI 1000.0
/* Function key mode */ /* Function key mode */
enum fkeymode { enum fkeymode {
FKEYMODE_UNKNOWN = 0, FKEYMODE_UNKNOWN = 0,
@@ -131,18 +133,25 @@ typedef struct {
EV_QUEUE_KEY, /* xf86PostKeyboardEvent() */ EV_QUEUE_KEY, /* xf86PostKeyboardEvent() */
EV_QUEUE_BTN, /* xf86PostButtonEvent() */ EV_QUEUE_BTN, /* xf86PostButtonEvent() */
EV_QUEUE_PROXIMITY, /* xf86PostProximityEvent() */ EV_QUEUE_PROXIMITY, /* xf86PostProximityEvent() */
#ifdef MULTITOUCH
EV_QUEUE_TOUCH, /*xf86PostTouchEvent() */ EV_QUEUE_TOUCH, /*xf86PostTouchEvent() */
#endif
} type; } type;
union { union {
int key; /* May be either a key code or button number. */ int key; /* May be either a key code or button number. */
#ifdef MULTITOUCH
unsigned int touch; /* Touch ID */ unsigned int touch; /* Touch ID */
#endif
} detail; } detail;
int val; /* State of the key/button/touch; pressed or released. */ int val; /* State of the key/button/touch; pressed or released. */
#ifdef MULTITOUCH
ValuatorMask *touchMask; ValuatorMask *touchMask;
#endif
} EventQueueRec, *EventQueuePtr; } EventQueueRec, *EventQueuePtr;
typedef struct { typedef struct {
struct libevdev *dev; unsigned short id_vendor;
unsigned short id_product;
char *device; char *device;
int grabDevice; /* grab the event device? */ int grabDevice; /* grab the event device? */
@@ -151,19 +160,16 @@ typedef struct {
int num_mt_vals; /* number of multitouch valuators */ int num_mt_vals; /* number of multitouch valuators */
int abs_axis_map[ABS_CNT]; /* Map evdev ABS_* to index */ int abs_axis_map[ABS_CNT]; /* Map evdev ABS_* to index */
int rel_axis_map[REL_CNT]; /* Map evdev REL_* to index */ int rel_axis_map[REL_CNT]; /* Map evdev REL_* to index */
ValuatorMask *abs_vals; /* values for absolute axis */ ValuatorMask *vals; /* new values coming in */
ValuatorMask *rel_vals; /* values for relative axis */ ValuatorMask *old_vals; /* old values for calculating relative motion */
ValuatorMask *old_vals; /* old absolute values for calculating relative motion */ ValuatorMask *prox; /* last values set while not in proximity */
ValuatorMask *prox; /* last absolute values set while not in proximity */
ValuatorMask *mt_mask; ValuatorMask *mt_mask;
ValuatorMask **last_mt_vals; ValuatorMask **last_mt_vals;
int cur_slot; int cur_slot;
struct slot { enum SlotState slot_state;
int dirty; #ifdef MULTITOUCH
enum SlotState state;
} *slots;
struct mtdev *mtdev; struct mtdev *mtdev;
BOOL fake_mt; #endif
int flags; int flags;
int in_proximity; /* device in proximity */ int in_proximity; /* device in proximity */
@@ -172,8 +178,8 @@ typedef struct {
BOOL swap_axes; BOOL swap_axes;
BOOL invert_x; BOOL invert_x;
BOOL invert_y; BOOL invert_y;
int resolution;
int delta[REL_CNT];
unsigned int abs_queued, rel_queued, prox_queued; unsigned int abs_queued, rel_queued, prox_queued;
/* Middle mouse button emulation */ /* Middle mouse button emulation */
@@ -194,7 +200,7 @@ typedef struct {
int button; /* phys button to emit */ int button; /* phys button to emit */
int threshold; /* move threshold in dev coords */ int threshold; /* move threshold in dev coords */
OsTimerPtr timer; OsTimerPtr timer;
double delta[2]; /* delta x/y, accumulating */ int delta[2]; /* delta x/y, accumulating */
int startpos[2]; /* starting pos for abs devices */ int startpos[2]; /* starting pos for abs devices */
int flags; /* remember if we had rel or abs movement */ int flags; /* remember if we had rel or abs movement */
} emulate3B; } emulate3B;
@@ -214,11 +220,6 @@ typedef struct {
Time expires; /* time of expiry */ Time expires; /* time of expiry */
Time timeout; Time timeout;
} emulateWheel; } emulateWheel;
struct {
int vert_delta;
int horiz_delta;
int dial_delta;
} smoothScroll;
/* run-time calibration */ /* run-time calibration */
struct { struct {
int min_x; int min_x;
@@ -233,6 +234,13 @@ typedef struct {
int reopen_left; /* number of attempts left to re-open the device */ int reopen_left; /* number of attempts left to re-open the device */
OsTimerPtr reopen_timer; OsTimerPtr reopen_timer;
/* Cached info from device. */
unsigned long bitmask[NLONGS(EV_CNT)];
unsigned long key_bitmask[NLONGS(KEY_CNT)];
unsigned long rel_bitmask[NLONGS(REL_CNT)];
unsigned long abs_bitmask[NLONGS(ABS_CNT)];
struct input_absinfo absinfo[ABS_CNT];
/* minor/major number */ /* minor/major number */
dev_t min_maj; dev_t min_maj;
@@ -249,12 +257,16 @@ typedef struct {
void EvdevQueueKbdEvent(InputInfoPtr pInfo, struct input_event *ev, int value); void EvdevQueueKbdEvent(InputInfoPtr pInfo, struct input_event *ev, int value);
void EvdevQueueButtonEvent(InputInfoPtr pInfo, int button, int value); void EvdevQueueButtonEvent(InputInfoPtr pInfo, int button, int value);
void EvdevQueueProximityEvent(InputInfoPtr pInfo, int value); void EvdevQueueProximityEvent(InputInfoPtr pInfo, int value);
#ifdef MULTITOUCH
void EvdevQueueTouchEvent(InputInfoPtr pInfo, unsigned int touch, void EvdevQueueTouchEvent(InputInfoPtr pInfo, unsigned int touch,
ValuatorMask *mask, uint16_t type); ValuatorMask *mask, uint16_t type);
#endif
void EvdevPostButtonEvent(InputInfoPtr pInfo, int button, enum ButtonAction act); void EvdevPostButtonEvent(InputInfoPtr pInfo, int button, enum ButtonAction act);
void EvdevQueueButtonClicks(InputInfoPtr pInfo, int button, int count); void EvdevQueueButtonClicks(InputInfoPtr pInfo, int button, int count);
void EvdevPostRelativeMotionEvents(InputInfoPtr pInfo); void EvdevPostRelativeMotionEvents(InputInfoPtr pInfo, int num_v, int first_v,
void EvdevPostAbsoluteMotionEvents(InputInfoPtr pInfo); int v[MAX_VALUATORS]);
void EvdevPostAbsoluteMotionEvents(InputInfoPtr pInfo, int num_v, int first_v,
int v[MAX_VALUATORS]);
unsigned int EvdevUtilButtonEventToButtonNumber(EvdevPtr pEvdev, int code); unsigned int EvdevUtilButtonEventToButtonNumber(EvdevPtr pEvdev, int code);
/* Middle Button emulation */ /* Middle Button emulation */
@@ -272,7 +284,7 @@ BOOL Evdev3BEmuFilterEvent(InputInfoPtr, int, BOOL);
void Evdev3BEmuPreInit(InputInfoPtr pInfo); void Evdev3BEmuPreInit(InputInfoPtr pInfo);
void Evdev3BEmuOn(InputInfoPtr); void Evdev3BEmuOn(InputInfoPtr);
void Evdev3BEmuFinalize(InputInfoPtr); void Evdev3BEmuFinalize(InputInfoPtr);
void Evdev3BEmuProcessRelMotion(InputInfoPtr pInfo, double dx, double dy); void Evdev3BEmuProcessRelMotion(InputInfoPtr pInfo, int dx, int dy);
void Evdev3BEmuProcessAbsMotion(InputInfoPtr pInfo, ValuatorMask *vals); void Evdev3BEmuProcessAbsMotion(InputInfoPtr pInfo, ValuatorMask *vals);
/* Mouse Wheel emulation */ /* Mouse Wheel emulation */