diff options
Diffstat (limited to 'src/multitouch.c')
| -rw-r--r-- | src/multitouch.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/multitouch.c b/src/multitouch.c index 4fb1e4b..e2309bd 100644 --- a/src/multitouch.c +++ b/src/multitouch.c | |||
| @@ -21,6 +21,12 @@ | |||
| 21 | 21 | ||
| 22 | #include "gestures.h" | 22 | #include "gestures.h" |
| 23 | 23 | ||
| 24 | #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 | ||
| 25 | #include <X11/Xatom.h> | ||
| 26 | #include <xserver-properties.h> | ||
| 27 | #endif | ||
| 28 | |||
| 29 | |||
| 24 | //////////////////////////////////////////////////////////////////////////// | 30 | //////////////////////////////////////////////////////////////////////////// |
| 25 | 31 | ||
| 26 | static void pointer_control(DeviceIntPtr dev, PtrCtrl *ctrl) | 32 | static void pointer_control(DeviceIntPtr dev, PtrCtrl *ctrl) |
| @@ -41,10 +47,60 @@ static int pointer_property(DeviceIntPtr dev, | |||
| 41 | 47 | ||
| 42 | //////////////////////////////////////////////////////////////////////////// | 48 | //////////////////////////////////////////////////////////////////////////// |
| 43 | 49 | ||
| 50 | |||
| 51 | |||
| 52 | #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 | ||
| 53 | static void InitAxesLabels(Atom *labels, int nlabels) | ||
| 54 | { | ||
| 55 | memset(labels, 0, nlabels * sizeof(Atom)); | ||
| 56 | switch(nlabels) | ||
| 57 | { | ||
| 58 | default: | ||
| 59 | case 2: | ||
| 60 | labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y); | ||
| 61 | case 1: | ||
| 62 | labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X); | ||
| 63 | break; | ||
| 64 | } | ||
| 65 | } | ||
| 66 | |||
| 67 | static void InitButtonLabels(Atom *labels, int nlabels) | ||
| 68 | { | ||
| 69 | memset(labels, 0, nlabels * sizeof(Atom)); | ||
| 70 | switch(nlabels) | ||
| 71 | { | ||
| 72 | default: | ||
| 73 | case 7: | ||
| 74 | labels[6] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_RIGHT); | ||
| 75 | case 6: | ||
| 76 | labels[5] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_LEFT); | ||
| 77 | case 5: | ||
| 78 | labels[4] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_DOWN); | ||
| 79 | case 4: | ||
| 80 | labels[3] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_UP); | ||
| 81 | case 3: | ||
| 82 | labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT); | ||
| 83 | case 2: | ||
| 84 | labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE); | ||
| 85 | case 1: | ||
| 86 | labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT); | ||
| 87 | break; | ||
| 88 | } | ||
| 89 | } | ||
| 90 | #endif | ||
| 91 | |||
| 44 | static int device_init(DeviceIntPtr dev, LocalDevicePtr local) | 92 | static int device_init(DeviceIntPtr dev, LocalDevicePtr local) |
| 45 | { | 93 | { |
| 46 | struct MTouch *mt = local->private; | 94 | struct MTouch *mt = local->private; |
| 47 | unsigned char btmap[DIM_BUTTON + 1]={0,1,2,3}; | 95 | unsigned char btmap[DIM_BUTTON + 1]={0,1,2,3}; |
| 96 | #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 | ||
| 97 | Atom btn_labels[SYN_MAX_BUTTONS] = { 0 }; | ||
| 98 | Atom axes_labels[2] = { 0 }; | ||
| 99 | |||
| 100 | InitAxesLabels(axes_labels, 2); | ||
| 101 | InitButtonLabels(btn_labels, SYN_MAX_BUTTONS); | ||
| 102 | #endif | ||
| 103 | |||
| 48 | 104 | ||
| 49 | local->fd = xf86OpenSerial(local->options); | 105 | local->fd = xf86OpenSerial(local->options); |
| 50 | if (local->fd < 0) { | 106 | if (local->fd < 0) { |
| @@ -70,16 +126,28 @@ static int device_init(DeviceIntPtr dev, LocalDevicePtr local) | |||
| 70 | pointer_control, | 126 | pointer_control, |
| 71 | GetMotionHistorySize(), | 127 | GetMotionHistorySize(), |
| 72 | 2); | 128 | 2); |
| 129 | #elif GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 7 | ||
| 130 | InitPointerDeviceStruct((DevicePtr)dev, | ||
| 131 | btmap, DIM_BUTTON, btn_labels, | ||
| 132 | pointer_control, | ||
| 133 | GetMotionHistorySize(), | ||
| 134 | 2, axes_labels); | ||
| 73 | #else | 135 | #else |
| 74 | #error "Unsupported ABI_XINPUT_VERSION" | 136 | #error "Unsupported ABI_XINPUT_VERSION" |
| 75 | #endif | 137 | #endif |
| 76 | 138 | ||
| 77 | xf86InitValuatorAxisStruct(dev, 0, | 139 | xf86InitValuatorAxisStruct(dev, 0, |
| 140 | #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 | ||
| 141 | axes_labels[0], | ||
| 142 | #endif | ||
| 78 | mt->caps.abs_position_x.minimum, | 143 | mt->caps.abs_position_x.minimum, |
| 79 | mt->caps.abs_position_x.maximum, | 144 | mt->caps.abs_position_x.maximum, |
| 80 | 1, 0, 1); | 145 | 1, 0, 1); |
| 81 | xf86InitValuatorDefaults(dev, 0); | 146 | xf86InitValuatorDefaults(dev, 0); |
| 82 | xf86InitValuatorAxisStruct(dev, 1, | 147 | xf86InitValuatorAxisStruct(dev, 1, |
| 148 | #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 | ||
| 149 | axes_labels[1], | ||
| 150 | #endif | ||
| 83 | mt->caps.abs_position_y.minimum, | 151 | mt->caps.abs_position_y.minimum, |
| 84 | mt->caps.abs_position_y.maximum, | 152 | mt->caps.abs_position_y.maximum, |
| 85 | 1, 0, 1); | 153 | 1, 0, 1); |
