mirror of
https://github.com/X11Libre/xf86-input-evdev.git
synced 2026-04-14 11:44:16 +00:00
Compare commits
5 Commits
xf86-input
...
xf86-input
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1e76b7602e | ||
|
|
62010287eb | ||
|
|
e41befa83f | ||
|
|
34619347b7 | ||
|
|
1a031657b9 |
@@ -23,7 +23,7 @@
|
||||
# Initialize Autoconf
|
||||
AC_PREREQ([2.60])
|
||||
AC_INIT([xf86-input-evdev],
|
||||
[2.8.2],
|
||||
[2.8.4],
|
||||
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
|
||||
[xf86-input-evdev])
|
||||
AC_CONFIG_SRCDIR([Makefile.am])
|
||||
|
||||
@@ -97,7 +97,6 @@ EvdevWheelEmuFilterMotion(InputInfoPtr pInfo, struct input_event *pEv)
|
||||
EvdevPtr pEvdev = (EvdevPtr)pInfo->private;
|
||||
WheelAxisPtr pAxis = NULL, pOtherAxis = NULL;
|
||||
int value = pEv->value;
|
||||
int oldValue;
|
||||
|
||||
/* Has wheel emulation been configured to be enabled? */
|
||||
if (!pEvdev->emulateWheel.enabled)
|
||||
@@ -118,9 +117,13 @@ EvdevWheelEmuFilterMotion(InputInfoPtr pInfo, struct input_event *pEv)
|
||||
/* We don't want to intercept real mouse wheel events */
|
||||
if(pEv->type == EV_ABS) {
|
||||
int axis = pEvdev->abs_axis_map[pEv->code];
|
||||
oldValue = valuator_mask_get(pEvdev->vals, axis);
|
||||
valuator_mask_set(pEvdev->vals, axis, value);
|
||||
value -= oldValue; /* make value into a differential measurement */
|
||||
int oldValue;
|
||||
|
||||
if (axis > -1 && valuator_mask_fetch(pEvdev->old_vals, axis, &oldValue)) {
|
||||
valuator_mask_set(pEvdev->vals, axis, value);
|
||||
value -= oldValue; /* make value into a differential measurement */
|
||||
} else
|
||||
value = 0; /* avoid a jump on the first touch */
|
||||
}
|
||||
|
||||
switch(pEv->code) {
|
||||
|
||||
130
src/evdev.c
130
src/evdev.c
@@ -65,11 +65,6 @@
|
||||
/* removed from server, purge when dropping support for server 1.10 */
|
||||
#define XI86_SEND_DRAG_EVENTS 0x08
|
||||
|
||||
#ifndef MAXDEVICES
|
||||
#include <inputstr.h> /* for MAX_DEVICES */
|
||||
#define MAXDEVICES MAX_DEVICES
|
||||
#endif
|
||||
|
||||
#define ArrayLength(a) (sizeof(a) / (sizeof((a)[0])))
|
||||
|
||||
#define MIN_KEYCODE 8
|
||||
@@ -138,11 +133,6 @@ static Atom prop_btn_label;
|
||||
static Atom prop_device;
|
||||
static Atom prop_virtual;
|
||||
|
||||
/* All devices the evdev driver has allocated and knows about.
|
||||
* MAXDEVICES is safe as null-terminated array, as two devices (VCP and VCK)
|
||||
* cannot be used by evdev, leaving us with a space of 2 at the end. */
|
||||
static EvdevPtr evdev_devices[MAXDEVICES] = {NULL};
|
||||
|
||||
static int EvdevSwitchMode(ClientPtr client, DeviceIntPtr device, int mode)
|
||||
{
|
||||
InputInfoPtr pInfo;
|
||||
@@ -225,60 +215,25 @@ static BOOL
|
||||
EvdevIsDuplicate(InputInfoPtr pInfo)
|
||||
{
|
||||
EvdevPtr pEvdev = pInfo->private;
|
||||
EvdevPtr* dev = evdev_devices;
|
||||
InputInfoPtr d;
|
||||
|
||||
if (pEvdev->min_maj)
|
||||
nt_list_for_each_entry(d, xf86FirstLocalDevice(), next)
|
||||
{
|
||||
while(*dev)
|
||||
{
|
||||
if ((*dev) != pEvdev &&
|
||||
(*dev)->min_maj &&
|
||||
(*dev)->min_maj == pEvdev->min_maj)
|
||||
return TRUE;
|
||||
dev++;
|
||||
}
|
||||
EvdevPtr e;
|
||||
|
||||
if (strcmp(d->drv->driverName, "evdev") != 0)
|
||||
continue;
|
||||
|
||||
e = (EvdevPtr)d->private;
|
||||
if (e != pEvdev &&
|
||||
e->min_maj &&
|
||||
e->min_maj == pEvdev->min_maj)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add to internal device list.
|
||||
*/
|
||||
static void
|
||||
EvdevAddDevice(InputInfoPtr pInfo)
|
||||
{
|
||||
EvdevPtr pEvdev = pInfo->private;
|
||||
EvdevPtr* dev = evdev_devices;
|
||||
|
||||
while(*dev)
|
||||
dev++;
|
||||
|
||||
*dev = pEvdev;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove from internal device list.
|
||||
*/
|
||||
static void
|
||||
EvdevRemoveDevice(InputInfoPtr pInfo)
|
||||
{
|
||||
EvdevPtr pEvdev = pInfo->private;
|
||||
EvdevPtr *dev = evdev_devices;
|
||||
int count = 0;
|
||||
|
||||
while(*dev)
|
||||
{
|
||||
count++;
|
||||
if (*dev == pEvdev)
|
||||
{
|
||||
memmove(dev, dev + 1,
|
||||
sizeof(evdev_devices) - (count * sizeof(EvdevPtr)));
|
||||
break;
|
||||
}
|
||||
dev++;
|
||||
}
|
||||
}
|
||||
|
||||
static BOOL
|
||||
EvdevDeviceIsVirtual(const char* devicenode)
|
||||
{
|
||||
@@ -493,31 +448,39 @@ EvdevProcessValuators(InputInfoPtr pInfo)
|
||||
EvdevPtr pEvdev = pInfo->private;
|
||||
int *delta = pEvdev->delta;
|
||||
|
||||
/* convert to relative motion for touchpads */
|
||||
if (pEvdev->abs_queued && (pEvdev->flags & EVDEV_RELATIVE_MODE)) {
|
||||
if (pEvdev->in_proximity) {
|
||||
if (valuator_mask_isset(pEvdev->vals, 0))
|
||||
{
|
||||
if (valuator_mask_isset(pEvdev->old_vals, 0))
|
||||
delta[REL_X] = valuator_mask_get(pEvdev->vals, 0) -
|
||||
valuator_mask_get(pEvdev->old_vals, 0);
|
||||
valuator_mask_set(pEvdev->old_vals, 0,
|
||||
valuator_mask_get(pEvdev->vals, 0));
|
||||
}
|
||||
if (valuator_mask_isset(pEvdev->vals, 1))
|
||||
{
|
||||
if (valuator_mask_isset(pEvdev->old_vals, 1))
|
||||
delta[REL_Y] = valuator_mask_get(pEvdev->vals, 1) -
|
||||
valuator_mask_get(pEvdev->old_vals, 1);
|
||||
valuator_mask_set(pEvdev->old_vals, 1,
|
||||
valuator_mask_get(pEvdev->vals, 1));
|
||||
if (pEvdev->abs_queued) {
|
||||
/* convert to relative motion for touchpads */
|
||||
if (pEvdev->flags & EVDEV_RELATIVE_MODE) {
|
||||
if (pEvdev->in_proximity) {
|
||||
if (valuator_mask_isset(pEvdev->vals, 0))
|
||||
{
|
||||
if (valuator_mask_isset(pEvdev->old_vals, 0))
|
||||
delta[REL_X] = valuator_mask_get(pEvdev->vals, 0) -
|
||||
valuator_mask_get(pEvdev->old_vals, 0);
|
||||
valuator_mask_set(pEvdev->old_vals, 0,
|
||||
valuator_mask_get(pEvdev->vals, 0));
|
||||
}
|
||||
if (valuator_mask_isset(pEvdev->vals, 1))
|
||||
{
|
||||
if (valuator_mask_isset(pEvdev->old_vals, 1))
|
||||
delta[REL_Y] = valuator_mask_get(pEvdev->vals, 1) -
|
||||
valuator_mask_get(pEvdev->old_vals, 1);
|
||||
valuator_mask_set(pEvdev->old_vals, 1,
|
||||
valuator_mask_get(pEvdev->vals, 1));
|
||||
}
|
||||
} else {
|
||||
valuator_mask_zero(pEvdev->old_vals);
|
||||
}
|
||||
valuator_mask_zero(pEvdev->vals);
|
||||
pEvdev->abs_queued = 0;
|
||||
pEvdev->rel_queued = 1;
|
||||
} else {
|
||||
valuator_mask_zero(pEvdev->old_vals);
|
||||
int val;
|
||||
if (valuator_mask_fetch(pEvdev->vals, 0, &val))
|
||||
valuator_mask_set(pEvdev->old_vals, 0, val);
|
||||
if (valuator_mask_fetch(pEvdev->vals, 1, &val))
|
||||
valuator_mask_set(pEvdev->old_vals, 1, val);
|
||||
}
|
||||
valuator_mask_zero(pEvdev->vals);
|
||||
pEvdev->abs_queued = 0;
|
||||
pEvdev->rel_queued = 1;
|
||||
}
|
||||
|
||||
if (pEvdev->rel_queued) {
|
||||
@@ -1545,7 +1508,7 @@ EvdevAddAbsValuatorClass(DeviceIntPtr device, int want_scroll_axes)
|
||||
NO_AXIS_LIMITS, NO_AXIS_LIMITS,
|
||||
0, 0, 0, Relative);
|
||||
SetScrollValuator(device, pEvdev->rel_axis_map[idx],
|
||||
SCROLL_TYPE_VERTICAL, -1.0,
|
||||
SCROLL_TYPE_HORIZONTAL, 1.0,
|
||||
SCROLL_FLAG_NONE);
|
||||
}
|
||||
}
|
||||
@@ -1688,7 +1651,7 @@ EvdevAddRelValuatorClass(DeviceIntPtr device)
|
||||
if (axis == REL_WHEEL)
|
||||
SetScrollValuator(device, axnum, SCROLL_TYPE_VERTICAL, -1.0, SCROLL_FLAG_PREFERRED);
|
||||
else if (axis == REL_DIAL)
|
||||
SetScrollValuator(device, axnum, SCROLL_TYPE_VERTICAL, -1.0, SCROLL_FLAG_NONE);
|
||||
SetScrollValuator(device, axnum, SCROLL_TYPE_HORIZONTAL, 1.0, SCROLL_FLAG_NONE);
|
||||
else if (axis == REL_HWHEEL)
|
||||
SetScrollValuator(device, axnum, SCROLL_TYPE_HORIZONTAL, 1.0, SCROLL_FLAG_NONE);
|
||||
#endif
|
||||
@@ -1964,7 +1927,6 @@ EvdevProc(DeviceIntPtr device, int what)
|
||||
xf86IDrvMsg(pInfo, X_INFO, "Close\n");
|
||||
EvdevCloseDevice(pInfo);
|
||||
EvdevFreeMasks(pEvdev);
|
||||
EvdevRemoveDevice(pInfo);
|
||||
pEvdev->min_maj = 0;
|
||||
break;
|
||||
|
||||
@@ -2631,8 +2593,6 @@ EvdevPreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
|
||||
pInfo->type_name);
|
||||
pInfo->type_name = pEvdev->type_name;
|
||||
|
||||
EvdevAddDevice(pInfo);
|
||||
|
||||
if (pEvdev->flags & EVDEV_BUTTON_EVENTS)
|
||||
{
|
||||
EvdevMBEmuPreInit(pInfo);
|
||||
|
||||
Reference in New Issue
Block a user