aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZephaniah E. Hull <warp@agamemnon.b5>2006-07-19 23:06:23 -0400
committerZephaniah E. Hull <warp@agamemnon.b5>2006-07-19 23:06:23 -0400
commitfa03de438ea0ae0f07424235f4972e73ff88ef17 (patch)
treef4400054caa58d89884546da2e824f809ed077cc
parentSplit the New functions so that structs can be allocated and buttons (diff)
downloadxf86-input-evdev-fa03de438ea0ae0f07424235f4972e73ff88ef17.tar.gz
xf86-input-evdev-fa03de438ea0ae0f07424235f4972e73ff88ef17.tar.bz2
xf86-input-evdev-fa03de438ea0ae0f07424235f4972e73ff88ef17.zip
Move the axis to button map code back into the rel code.
This might solve some problems, but should at least prevent some odd behavior.
-rw-r--r--src/evdev.h2
-rw-r--r--src/evdev_axes.c41
-rw-r--r--src/evdev_btn.c12
3 files changed, 26 insertions, 29 deletions
diff --git a/src/evdev.h b/src/evdev.h
index 2a65530..161978d 100644
--- a/src/evdev.h
+++ b/src/evdev.h
@@ -174,12 +174,12 @@ typedef struct {
int v[REL_MAX];
int count;
int map[REL_MAX];
+ int btnMap[REL_MAX][2];
} evdevRelRec, *evdevRelPtr;
typedef struct {
int axes;
int v[ABS_MAX];
- int btnMap[ABS_MAX][2];
} evdevAxesRec, *evdevAxesPtr;
typedef struct {
diff --git a/src/evdev_axes.c b/src/evdev_axes.c
index 751978f..cc1c24d 100644
--- a/src/evdev_axes.c
+++ b/src/evdev_axes.c
@@ -156,14 +156,7 @@ EvdevAxesRealSyn (InputInfoPtr pInfo, int absolute, int skip_xy)
evdevDevicePtr pEvdev = pInfo->private;
evdevStatePtr state = &pEvdev->state;
evdevAxesPtr axes = state->axes;
- int i, btn;
-
- for (i = 0; i < state->axes->axes; i++) {
- if ((state->axes->v[i] > 0) && (btn = state->axes->btnMap[i][0]))
- EvdevBtnPostFakeClicks (pInfo, btn, state->axes->v[i]);
- else if ((state->axes->v[i] < 0) && (btn = state->axes->btnMap[i][1]))
- EvdevBtnPostFakeClicks (pInfo, btn, -state->axes->v[i]);
- }
+ int i;
/*
if (skip_xy && (axes->v[0] || axes->v[1]))
@@ -226,16 +219,12 @@ EvdevAxesAbsSyn (InputInfoPtr pInfo)
{
evdevDevicePtr pEvdev = pInfo->private;
evdevStatePtr state = &pEvdev->state;
- int i, n;
+ int i = 0, n = state->abs->n++ & 1;
Bool skip_xy = 0;
if (!state->axes || !state->abs || !state->abs->count)
return;
- n = state->abs->n & 1;
- state->abs->n++;
- i = 0;
-
if (state->mode == Relative && state->abs->axes >= 2) {
if (!state->abs->use_touch || state->abs->touch) {
if (state->abs->reset) {
@@ -277,18 +266,26 @@ EvdevAxesRelSyn (InputInfoPtr pInfo)
{
evdevDevicePtr pEvdev = pInfo->private;
evdevStatePtr state = &pEvdev->state;
- int i;
+ evdevRelPtr rel = state->rel;
+ int i, btn;
if (!state->axes || !state->rel || !state->rel->count)
return;
for (i = 0; i < REL_MAX; i++) {
- state->axes->v[i] = state->rel->v[i];
- state->rel->v[i] = 0;
+ if (rel->btnMap[i][0] || rel->btnMap[i][1]) {
+ if ((rel->v[i] > 0) && (btn = rel->btnMap[i][0]))
+ EvdevBtnPostFakeClicks (pInfo, btn, rel->v[i]);
+ else if ((rel->v[i] < 0) && (btn = rel->btnMap[i][1]))
+ EvdevBtnPostFakeClicks (pInfo, btn, -rel->v[i]);
+ }
+
+ state->axes->v[i] = rel->v[i];
+ rel->v[i] = 0;
}
EvdevAxesRealSyn (pInfo, 0, 0);
- state->rel->count = 0;
+ rel->count = 0;
}
void
@@ -530,13 +527,13 @@ EvdevAxisRelNew0(InputInfoPtr pInfo)
k = state->rel->map[i];
- if (!s || (sscanf(s, "%d %d", &state->axes->btnMap[k][0],
- &state->axes->btnMap[k][1]) != 2))
- state->axes->btnMap[k][0] = state->axes->btnMap[k][1] = 0;
+ if (!s || (sscanf(s, "%d %d", &state->rel->btnMap[k][0],
+ &state->rel->btnMap[k][1]) != 2))
+ state->rel->btnMap[k][0] = state->rel->btnMap[k][1] = 0;
- if (state->axes->btnMap[k][0] || state->axes->btnMap[k][1])
+ if (state->rel->btnMap[k][0] || state->rel->btnMap[k][1])
xf86Msg(X_CONFIG, "%s: %s: %d %d.\n", pInfo->name, option,
- state->axes->btnMap[k][0], state->axes->btnMap[k][1]);
+ state->rel->btnMap[k][0], state->rel->btnMap[k][1]);
j++;
}
diff --git a/src/evdev_btn.c b/src/evdev_btn.c
index 9a9b65e..dc9ed67 100644
--- a/src/evdev_btn.c
+++ b/src/evdev_btn.c
@@ -215,12 +215,12 @@ EvdevBtnCalcRemap (InputInfoPtr pInfo)
do {
clear = 1;
for (j = 0; j < REL_MAX; j++) {
- if (state->axes->btnMap[j][0] == (i + base)) {
+ if (state->rel->btnMap[j][0] == (i + base)) {
base++;
clear = 0;
break;
}
- if (state->axes->btnMap[j][1] == (i + base)) {
+ if (state->rel->btnMap[j][1] == (i + base)) {
base++;
clear = 0;
break;
@@ -243,10 +243,10 @@ EvdevBtnCalcRemap (InputInfoPtr pInfo)
if (state->rel) {
for (i = 0; i < REL_MAX; i++) {
- if (state->axes->btnMap[i][0] > state->btn->buttons)
- state->btn->buttons = state->axes->btnMap[i][0];
- if (state->axes->btnMap[i][1] > state->btn->buttons)
- state->btn->buttons = state->axes->btnMap[i][1];
+ if (state->rel->btnMap[i][0] > state->btn->buttons)
+ state->btn->buttons = state->rel->btnMap[i][0];
+ if (state->rel->btnMap[i][1] > state->btn->buttons)
+ state->btn->buttons = state->rel->btnMap[i][1];
}
}
}