aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac2
-rw-r--r--src/evdev.c12
-rw-r--r--src/evdev.h11
-rw-r--r--src/evdev_axes.c81
-rw-r--r--src/evdev_brain.c1
-rw-r--r--src/evdev_key.c3
-rw-r--r--src/inotify-syscalls.h4
7 files changed, 87 insertions, 27 deletions
diff --git a/configure.ac b/configure.ac
index e849632..e9a82c4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -22,7 +22,7 @@
AC_PREREQ(2.57)
AC_INIT([xf86-input-evdev],
- 1.1.2,
+ 1.1.3,
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
xf86-input-evdev)
diff --git a/src/evdev.c b/src/evdev.c
index ba8f862..f2d61f6 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -117,9 +117,13 @@ EvdevReadInput(InputInfoPtr pInfo)
case EV_SYN:
if (ev.code == SYN_REPORT) {
- EvdevAxesSyn (pInfo);
- /* EvdevBtnSyn (pInfo); */
- /* EvdevKeySyn (pInfo); */
+ EvdevAxesSynRep (pInfo);
+ /* EvdevBtnSynRep (pInfo); */
+ /* EvdevKeySynRep (pInfo); */
+ } else if (ev.code == SYN_CONFIG) {
+ EvdevAxesSynCfg (pInfo);
+ /* EvdevBtnSynCfg (pInfo); */
+ /* EvdevKeySynCfg (pInfo); */
}
break;
}
@@ -481,7 +485,7 @@ static XF86ModuleVersionInfo EvdevVersionRec =
MODULEVENDORSTRING,
MODINFOSTRING1,
MODINFOSTRING2,
- 0, /* Missing from SDK: XORG_VERSION_CURRENT, */
+ XORG_VERSION_CURRENT,
1, 1, 0,
ABI_CLASS_XINPUT,
ABI_XINPUT_VERSION,
diff --git a/src/evdev.h b/src/evdev.h
index 97f02bf..ac4c364 100644
--- a/src/evdev.h
+++ b/src/evdev.h
@@ -117,6 +117,12 @@
#include <X11/extensions/XKB.h>
#include <X11/extensions/XKBstr.h>
+/* XInput 1.4+ compatability. */
+#ifndef SendCoreEvents
+#define SendCoreEvents 59
+#define DontSendCoreEvents 60
+#endif
+
/*
* Switch events
@@ -166,7 +172,7 @@ typedef struct {
int screen; /* Screen number for this device. */
Bool use_touch;
Bool touch;
- Bool reset;
+ Bool reset_x, reset_y;
} evdevAbsRec, *evdevAbsPtr;
typedef struct {
@@ -265,7 +271,8 @@ int EvdevAxesNew0(InputInfoPtr pInfo);
int EvdevAxesNew1(InputInfoPtr pInfo);
void EvdevAxesAbsProcess (InputInfoPtr pInfo, struct input_event *ev);
void EvdevAxesRelProcess (InputInfoPtr pInfo, struct input_event *ev);
-void EvdevAxesSyn (InputInfoPtr pInfo);
+void EvdevAxesSynRep (InputInfoPtr pInfo);
+void EvdevAxesSynCfg (InputInfoPtr pInfo);
int EvdevKeyInit (DeviceIntPtr device);
int EvdevKeyNew (InputInfoPtr pInfo);
diff --git a/src/evdev_axes.c b/src/evdev_axes.c
index 81dd772..6879ab1 100644
--- a/src/evdev_axes.c
+++ b/src/evdev_axes.c
@@ -49,6 +49,8 @@
#include <xf86_OSproc.h>
+#undef DEBUG
+
static char *rel_axis_names[] = {
"X",
"Y",
@@ -158,10 +160,10 @@ EvdevAxesRealSyn (InputInfoPtr pInfo, int absolute, int skip_xy)
evdevAxesPtr axes = state->axes;
int i;
- /*
- if (skip_xy && (axes->v[0] || axes->v[1]))
+#if DEBUG
+ if (skip_xy == 2 && (axes->v[0] || axes->v[1]))
xf86Msg(X_INFO, "%s: skip_xy: %d, x: %d, y: %d.\n", pInfo->name, skip_xy, axes->v[0], axes->v[1]);
- */
+#endif
/* FIXME: This is a truly evil kluge. */
if (skip_xy == 1 && state->axes->axes >= 2)
@@ -215,7 +217,29 @@ EvdevAxesRealSyn (InputInfoPtr pInfo, int absolute, int skip_xy)
}
static void
-EvdevAxesAbsSyn (InputInfoPtr pInfo)
+EvdevAxesAbsSynCfg (InputInfoPtr pInfo)
+{
+ evdevDevicePtr pEvdev = pInfo->private;
+ evdevStatePtr state = &pEvdev->state;
+ struct input_absinfo absinfo;
+ int i;
+
+ for (i = 0; i < ABS_MAX; i++) {
+ if (!test_bit (i, pEvdev->bits.abs))
+ continue;
+
+ if (ioctl (pInfo->fd, EVIOCGABS(i), &absinfo) < 0) {
+ xf86Msg(X_ERROR, "ioctl EVIOCGABS (%d) failed: %s\n", i, strerror(errno));
+ continue;
+ }
+ state->abs->min[state->abs->map[i]] = absinfo.minimum;
+ state->abs->max[state->abs->map[i]] = absinfo.maximum;
+ }
+
+}
+
+static void
+EvdevAxesAbsSynRep (InputInfoPtr pInfo)
{
evdevDevicePtr pEvdev = pInfo->private;
evdevStatePtr state = &pEvdev->state;
@@ -227,15 +251,24 @@ EvdevAxesAbsSyn (InputInfoPtr pInfo)
if (state->mode == Relative && state->abs->axes >= 2) {
if (!state->abs->use_touch || state->abs->touch) {
- if (state->abs->reset) {
- for (i = 0; i < 2; i++)
- state->axes->v[i] = 0;
- xf86Msg(X_INFO, "%s: Resetting.\n", pInfo->name);
- state->abs->reset = 0;
- } else {
+ if (state->abs->reset_x && state->abs->v[0] != state->abs->old_x) {
+ state->axes->v[0] = 0;
+ state->abs->reset_x = 0;
+#if DEBUG
+ xf86Msg(X_INFO, "%s: Resetting X.\n", pInfo->name);
+#endif
+ } else
state->axes->v[0] = state->abs->v[0] - state->abs->old_x;
+
+ if (state->abs->reset_y && state->abs->v[1] != state->abs->old_y) {
+ state->axes->v[1] = 0;
+ state->abs->reset_y = 0;
+#if DEBUG
+ xf86Msg(X_INFO, "%s: Resetting Y.\n", pInfo->name);
+#endif
+ } else
state->axes->v[1] = state->abs->v[1] - state->abs->old_y;
- }
+
state->abs->old_x = state->abs->v[0];
state->abs->old_y = state->abs->v[1];
EvdevAxesRealSyn (pInfo, 0, 2);
@@ -263,7 +296,7 @@ EvdevAxesAbsSyn (InputInfoPtr pInfo)
}
static void
-EvdevAxesRelSyn (InputInfoPtr pInfo)
+EvdevAxesRelSynRep (InputInfoPtr pInfo)
{
evdevDevicePtr pEvdev = pInfo->private;
evdevStatePtr state = &pEvdev->state;
@@ -290,10 +323,17 @@ EvdevAxesRelSyn (InputInfoPtr pInfo)
}
void
-EvdevAxesSyn (InputInfoPtr pInfo)
+EvdevAxesSynRep (InputInfoPtr pInfo)
+{
+ EvdevAxesAbsSynRep (pInfo);
+ EvdevAxesRelSynRep (pInfo);
+}
+
+void
+EvdevAxesSynCfg (InputInfoPtr pInfo)
{
- EvdevAxesAbsSyn (pInfo);
- EvdevAxesRelSyn (pInfo);
+ EvdevAxesAbsSynCfg (pInfo);
+/* EvdevAxesRelSynCfg (pInfo);*/
}
void
@@ -316,7 +356,7 @@ EvdevAxesAbsProcess (InputInfoPtr pInfo, struct input_event *ev)
state->abs->count++;
if (!state->sync)
- EvdevAxesAbsSyn (pInfo);
+ EvdevAxesAbsSynRep (pInfo);
}
void
@@ -338,7 +378,7 @@ EvdevAxesRelProcess (InputInfoPtr pInfo, struct input_event *ev)
state->rel->count++;
if (!state->sync)
- EvdevAxesRelSyn (pInfo);
+ EvdevAxesRelSynRep (pInfo);
}
int
@@ -633,8 +673,7 @@ EvdevAxesInit (DeviceIntPtr device)
if (!InitValuatorClassDeviceStruct(device, axes,
miPointerGetMotionEvents,
- miPointerGetMotionBufferSize(), 0,
- axes))
+ miPointerGetMotionBufferSize(), 0))
return !Success;
for (i = 0; i < axes; i++) {
@@ -656,10 +695,12 @@ EvdevAxesTouchCallback (InputInfoPtr pInfo, int button, int value)
evdevDevicePtr pEvdev = pInfo->private;
evdevStatePtr state = &pEvdev->state;
+#if DEBUG
xf86Msg(X_INFO, "%s: Touch callback; %d.\n", pInfo->name, value);
+#endif
if (state->abs->use_touch) {
state->abs->touch = !!value;
if (value)
- state->abs->reset = 1;
+ state->abs->reset_x = state->abs->reset_y = 1;
}
}
diff --git a/src/evdev_brain.c b/src/evdev_brain.c
index 246666f..7e65935 100644
--- a/src/evdev_brain.c
+++ b/src/evdev_brain.c
@@ -472,6 +472,7 @@ evdevRemoveDevice (evdevDevicePtr pEvdev)
for (device = &driver->devices; *device; device = &(*device)->next) {
if (*device == pEvdev) {
*device = pEvdev->next;
+ xf86DeleteInput(pEvdev->pInfo, 0);
pEvdev->next = NULL;
return;
}
diff --git a/src/evdev_key.c b/src/evdev_key.c
index 8917c3b..577ae73 100644
--- a/src/evdev_key.c
+++ b/src/evdev_key.c
@@ -240,8 +240,11 @@ static KeySym map[] = {
static void
EvdevKbdBell (int percent, DeviceIntPtr device, pointer ctrl, int unused)
{
+/* OS keyboard layer has been removed. */
+#if 0
xf86SoundKbdBell(percent, ((KeybdCtrl*) ctrl)->bell_pitch,
((KeybdCtrl*) ctrl)->bell_duration);
+#endif
}
static void
diff --git a/src/inotify-syscalls.h b/src/inotify-syscalls.h
index 7c68bc6..296da90 100644
--- a/src/inotify-syscalls.h
+++ b/src/inotify-syscalls.h
@@ -57,6 +57,10 @@
# define __NR_inotify_add_watch 5244
# define __NR_inotify_rm_watch 5245
# endif
+#elif defined (__mc68000__)
+# define __NR_inotify_init 284
+# define __NR_inotify_add_watch 285
+# define __NR_inotify_rm_watch 286
#else
# error "Unsupported architecture!"
#endif