diff options
-rw-r--r-- | src/evdev.c | 65 |
1 files changed, 37 insertions, 28 deletions
diff --git a/src/evdev.c b/src/evdev.c index 1b7b7fd..dacd3e3 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -1201,6 +1201,42 @@ EvdevAddFakeSingleTouchAxes(InputInfoPtr pInfo) return num_axes; } +static void +EvdevCountMTAxes(EvdevPtr pEvdev, int *num_mt_axes_total, + int *num_mt_axes, int *num_axes) +{ + int axis; + + /* Absolute multitouch axes: adjust mapping and axes counts. */ + for (axis = ABS_MT_SLOT; axis < ABS_MAX; axis++) + { + if (libevdev_has_event_code(pEvdev->dev, EV_ABS, axis)) + { + int j; + Bool skip = FALSE; + + /* Setup mapping if axis is in MT->legacy axis table. */ + for (j = 0; j < ArrayLength(mt_axis_mappings); j++) + { + if (mt_axis_mappings[j].mt_code == axis && + libevdev_has_event_code(pEvdev->dev, EV_ABS, mt_axis_mappings[j].code)) + { + mt_axis_mappings[j].needs_mapping = TRUE; + skip = TRUE; + } + } + + if (!is_blacklisted_axis(axis)) + { + (*num_mt_axes_total)++; + if (!skip) + (*num_mt_axes)++; + } + (*num_axes)--; + } + } +} + static int EvdevAddAbsValuatorClass(DeviceIntPtr device, int num_scroll_axes) { @@ -1235,34 +1271,7 @@ EvdevAddAbsValuatorClass(DeviceIntPtr device, int num_scroll_axes) num_axes += num_faked_axes; - /* Absolute multitouch axes: adjust mapping and axes counts. */ - for (axis = ABS_MT_SLOT; axis < ABS_MAX; axis++) - { - if (libevdev_has_event_code(pEvdev->dev, EV_ABS, axis)) - { - int j; - Bool skip = FALSE; - - /* Setup mapping if axis is in MT->legacy axis table. */ - for (j = 0; j < ArrayLength(mt_axis_mappings); j++) - { - if (mt_axis_mappings[j].mt_code == axis && - libevdev_has_event_code(pEvdev->dev, EV_ABS, mt_axis_mappings[j].code)) - { - mt_axis_mappings[j].needs_mapping = TRUE; - skip = TRUE; - } - } - - if (!is_blacklisted_axis(axis)) - { - num_mt_axes_total++; - if (!skip) - num_mt_axes++; - } - num_axes--; - } - } + EvdevCountMTAxes(pEvdev, &num_mt_axes_total, &num_mt_axes, &num_axes); /* Panic if, after faking ABS_X etc, we still only have mt-axes. */ if (num_axes == 0 && num_mt_axes > 0) { |