mirror of
https://github.com/X11Libre/xf86-input-evdev.git
synced 2026-04-14 11:44:16 +00:00
Compare commits
7 Commits
tracking/x
...
xf86-input
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
56e9a7a248 | ||
|
|
7df6523774 | ||
|
|
f4e76a4c53 | ||
|
|
ac772cde94 | ||
|
|
7749159241 | ||
|
|
833fc517d7 | ||
|
|
4d698d8ece |
@@ -23,7 +23,7 @@
|
||||
# Initialize Autoconf
|
||||
AC_PREREQ([2.60])
|
||||
AC_INIT([xf86-input-evdev],
|
||||
[2.7.0],
|
||||
[2.7.1],
|
||||
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
|
||||
[xf86-input-evdev])
|
||||
AC_CONFIG_SRCDIR([Makefile.am])
|
||||
|
||||
59
src/evdev.c
59
src/evdev.c
@@ -119,6 +119,7 @@ static int EvdevSwitchMode(ClientPtr client, DeviceIntPtr device, int mode);
|
||||
static BOOL EvdevGrabDevice(InputInfoPtr pInfo, int grab, int ungrab);
|
||||
static void EvdevSetCalibration(InputInfoPtr pInfo, int num_calibration, int calibration[4]);
|
||||
static int EvdevOpenDevice(InputInfoPtr pInfo);
|
||||
static void EvdevCloseDevice(InputInfoPtr pInfo);
|
||||
|
||||
static void EvdevInitAxesLabels(EvdevPtr pEvdev, int mode, int natoms, Atom *atoms);
|
||||
static void EvdevInitButtonLabels(EvdevPtr pEvdev, int natoms, Atom *atoms);
|
||||
@@ -1108,8 +1109,7 @@ EvdevReadInput(InputInfoPtr pInfo)
|
||||
EvdevMBEmuFinalize(pInfo);
|
||||
Evdev3BEmuFinalize(pInfo);
|
||||
xf86RemoveEnabledDevice(pInfo);
|
||||
close(pInfo->fd);
|
||||
pInfo->fd = -1;
|
||||
EvdevCloseDevice(pInfo);
|
||||
} else if (errno != EAGAIN)
|
||||
{
|
||||
/* We use X_NONE here because it doesn't alloc */
|
||||
@@ -1304,6 +1304,7 @@ EvdevAddAbsValuatorClass(DeviceIntPtr device)
|
||||
}
|
||||
#ifdef MULTITOUCH
|
||||
if (num_mt_axes_total > 0) {
|
||||
pEvdev->num_mt_vals = num_mt_axes_total;
|
||||
pEvdev->mt_mask = valuator_mask_new(num_mt_axes_total);
|
||||
if (!pEvdev->mt_mask) {
|
||||
xf86Msg(X_ERROR, "%s: failed to allocate MT valuator mask.\n",
|
||||
@@ -1384,7 +1385,8 @@ EvdevAddAbsValuatorClass(DeviceIntPtr device)
|
||||
XIDependentTouch : XIDirectTouch;
|
||||
|
||||
if (pEvdev->mtdev->caps.slot.maximum > 0)
|
||||
num_touches = pEvdev->mtdev->caps.slot.maximum;
|
||||
num_touches = pEvdev->mtdev->caps.slot.maximum -
|
||||
pEvdev->mtdev->caps.slot.minimum + 1;
|
||||
|
||||
if (!InitTouchClassDeviceStruct(device, num_touches, mode,
|
||||
num_mt_axes_total)) {
|
||||
@@ -1600,7 +1602,7 @@ EvdevAddRelValuatorClass(DeviceIntPtr device)
|
||||
else if (axis == REL_DIAL)
|
||||
SetScrollValuator(device, axnum, SCROLL_TYPE_VERTICAL, -1.0, SCROLL_FLAG_NONE);
|
||||
else if (axis == REL_HWHEEL)
|
||||
SetScrollValuator(device, axnum, SCROLL_TYPE_HORIZONTAL, -1.0, SCROLL_FLAG_NONE);
|
||||
SetScrollValuator(device, axnum, SCROLL_TYPE_HORIZONTAL, 1.0, SCROLL_FLAG_NONE);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1864,8 +1866,7 @@ EvdevProc(DeviceIntPtr device, int what)
|
||||
{
|
||||
EvdevGrabDevice(pInfo, 0, 1);
|
||||
xf86RemoveEnabledDevice(pInfo);
|
||||
close(pInfo->fd);
|
||||
pInfo->fd = -1;
|
||||
EvdevCloseDevice(pInfo);
|
||||
}
|
||||
pEvdev->min_maj = 0;
|
||||
pEvdev->flags &= ~EVDEV_INITIALIZED;
|
||||
@@ -1874,10 +1875,7 @@ EvdevProc(DeviceIntPtr device, int what)
|
||||
|
||||
case DEVICE_CLOSE:
|
||||
xf86IDrvMsg(pInfo, X_INFO, "Close\n");
|
||||
if (pInfo->fd != -1) {
|
||||
close(pInfo->fd);
|
||||
pInfo->fd = -1;
|
||||
}
|
||||
EvdevCloseDevice(pInfo);
|
||||
EvdevFreeMasks(pEvdev);
|
||||
EvdevRemoveDevice(pInfo);
|
||||
pEvdev->min_maj = 0;
|
||||
@@ -2271,6 +2269,9 @@ EvdevProbe(InputInfoPtr pInfo)
|
||||
xf86IDrvMsg(pInfo, X_INFO, "Configuring as touchscreen\n");
|
||||
pInfo->type_name = XI_TOUCHSCREEN;
|
||||
} else {
|
||||
if (!EvdevBitIsSet(pEvdev->rel_bitmask, REL_X) ||
|
||||
!EvdevBitIsSet(pEvdev->rel_bitmask, REL_Y))
|
||||
EvdevForceXY(pInfo, Relative);
|
||||
xf86IDrvMsg(pInfo, X_INFO, "Configuring as mouse\n");
|
||||
pInfo->type_name = XI_MOUSE;
|
||||
}
|
||||
@@ -2354,6 +2355,7 @@ EvdevOpenDevice(InputInfoPtr pInfo)
|
||||
pEvdev->cur_slot = pEvdev->mtdev->caps.slot.value;
|
||||
else {
|
||||
xf86Msg(X_ERROR, "%s: Couldn't open mtdev device\n", pInfo->name);
|
||||
EvdevCloseDevice(pInfo);
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
@@ -2363,17 +2365,34 @@ EvdevOpenDevice(InputInfoPtr pInfo)
|
||||
if (EvdevIsDuplicate(pInfo))
|
||||
{
|
||||
xf86IDrvMsg(pInfo, X_WARNING, "device file is duplicate. Ignoring.\n");
|
||||
close(pInfo->fd);
|
||||
#ifdef MULTITOUCH
|
||||
mtdev_close_delete(pEvdev->mtdev);
|
||||
pEvdev->mtdev = NULL;
|
||||
#endif
|
||||
EvdevCloseDevice(pInfo);
|
||||
return BadMatch;
|
||||
}
|
||||
|
||||
return Success;
|
||||
}
|
||||
|
||||
static void
|
||||
EvdevCloseDevice(InputInfoPtr pInfo)
|
||||
{
|
||||
EvdevPtr pEvdev = pInfo->private;
|
||||
if (pInfo->fd >= 0)
|
||||
{
|
||||
close(pInfo->fd);
|
||||
pInfo->fd = -1;
|
||||
}
|
||||
|
||||
#ifdef MULTITOUCH
|
||||
if (pEvdev->mtdev)
|
||||
{
|
||||
mtdev_close_delete(pEvdev->mtdev);
|
||||
pEvdev->mtdev = NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
EvdevUnInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
|
||||
{
|
||||
@@ -2454,8 +2473,7 @@ EvdevPreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
|
||||
return Success;
|
||||
|
||||
error:
|
||||
if (pInfo->fd >= 0)
|
||||
close(pInfo->fd);
|
||||
EvdevCloseDevice(pInfo);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -2875,7 +2893,8 @@ EvdevInitProperty(DeviceIntPtr dev)
|
||||
if ((pEvdev->num_vals > 0) && (prop_axis_label = XIGetKnownProperty(AXIS_LABEL_PROP)))
|
||||
{
|
||||
int mode;
|
||||
Atom atoms[pEvdev->num_vals];
|
||||
int num_axes = pEvdev->num_vals + pEvdev->num_mt_vals;
|
||||
Atom atoms[num_axes];
|
||||
|
||||
if (pEvdev->flags & EVDEV_ABSOLUTE_EVENTS)
|
||||
mode = Absolute;
|
||||
@@ -2886,9 +2905,9 @@ EvdevInitProperty(DeviceIntPtr dev)
|
||||
mode = Absolute;
|
||||
}
|
||||
|
||||
EvdevInitAxesLabels(pEvdev, mode, pEvdev->num_vals, atoms);
|
||||
EvdevInitAxesLabels(pEvdev, mode, num_axes, atoms);
|
||||
XIChangeDeviceProperty(dev, prop_axis_label, XA_ATOM, 32,
|
||||
PropModeReplace, pEvdev->num_vals, atoms, FALSE);
|
||||
PropModeReplace, num_axes, atoms, FALSE);
|
||||
XISetDevicePropertyDeletable(dev, prop_axis_label, FALSE);
|
||||
}
|
||||
/* Button labelling */
|
||||
|
||||
@@ -153,6 +153,7 @@ typedef struct {
|
||||
int grabDevice; /* grab the event device? */
|
||||
|
||||
int num_vals; /* number of valuators */
|
||||
int num_mt_vals; /* number of multitouch valuators */
|
||||
int axis_map[max(ABS_CNT, REL_CNT)]; /* Map evdev <axis> to index */
|
||||
ValuatorMask *vals; /* new values coming in */
|
||||
ValuatorMask *old_vals; /* old values for calculating relative motion */
|
||||
|
||||
Reference in New Issue
Block a user