diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/evdev.h | 2 | ||||
-rw-r--r-- | src/evdev_axes.c | 41 | ||||
-rw-r--r-- | src/evdev_btn.c | 12 |
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]; } } } |