diff options
| -rw-r--r-- | src/gestures.h | 1 | ||||
| -rw-r--r-- | src/multitouch.c | 59 |
2 files changed, 19 insertions, 41 deletions
diff --git a/src/gestures.h b/src/gestures.h index f83cae2..0e2a49e 100644 --- a/src/gestures.h +++ b/src/gestures.h | |||
| @@ -30,7 +30,6 @@ | |||
| 30 | #define GS_MOVE 1 | 30 | #define GS_MOVE 1 |
| 31 | #define GS_VSCROLL 2 | 31 | #define GS_VSCROLL 2 |
| 32 | #define GS_HSCROLL 3 | 32 | #define GS_HSCROLL 3 |
| 33 | #define SYN_MAX_BUTTONS 12 /* Max number of mouse buttons */ | ||
| 34 | 33 | ||
| 35 | //////////////////////////////////////////////////////// | 34 | //////////////////////////////////////////////////////// |
| 36 | 35 | ||
diff --git a/src/multitouch.c b/src/multitouch.c index fa966ce..acaeea1 100644 --- a/src/multitouch.c +++ b/src/multitouch.c | |||
| @@ -41,6 +41,9 @@ static const float hscroll_fraction = 0.2; | |||
| 41 | #define TRACE2(format, arg1, arg2) xf86Msg(X_INFO, format, arg1, arg2) | 41 | #define TRACE2(format, arg1, arg2) xf86Msg(X_INFO, format, arg1, arg2) |
| 42 | #endif | 42 | #endif |
| 43 | 43 | ||
| 44 | // button mapping simplified | ||
| 45 | #define PROPMAP(m, x, y) m[x] = XIGetKnownProperty(y) | ||
| 46 | |||
| 44 | //////////////////////////////////////////////////////////////////////////// | 47 | //////////////////////////////////////////////////////////////////////////// |
| 45 | 48 | ||
| 46 | static void pointer_control(DeviceIntPtr dev, PtrCtrl *ctrl) | 49 | static void pointer_control(DeviceIntPtr dev, PtrCtrl *ctrl) |
| @@ -61,45 +64,24 @@ static int pointer_property(DeviceIntPtr dev, | |||
| 61 | 64 | ||
| 62 | //////////////////////////////////////////////////////////////////////////// | 65 | //////////////////////////////////////////////////////////////////////////// |
| 63 | 66 | ||
| 64 | |||
| 65 | |||
| 66 | #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 | 67 | #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 |
| 67 | static void InitAxesLabels(Atom *labels, int nlabels) | 68 | static void initAxesLabels(Atom map[2]) |
| 68 | { | 69 | { |
| 69 | memset(labels, 0, nlabels * sizeof(Atom)); | 70 | memset(map, 0, 2 * sizeof(Atom)); |
| 70 | switch(nlabels) | 71 | PROPMAP(map, 0, AXIS_LABEL_PROP_REL_X); |
| 71 | { | 72 | PROPMAP(map, 1, AXIS_LABEL_PROP_REL_Y); |
| 72 | default: | ||
| 73 | case 2: | ||
| 74 | labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y); | ||
| 75 | case 1: | ||
| 76 | labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X); | ||
| 77 | break; | ||
| 78 | } | ||
| 79 | } | 73 | } |
| 80 | 74 | ||
| 81 | static void InitButtonLabels(Atom *labels, int nlabels) | 75 | static void initButtonLabels(Atom map[DIM_BUTTON]) |
| 82 | { | 76 | { |
| 83 | memset(labels, 0, nlabels * sizeof(Atom)); | 77 | memset(map, 0, DIM_BUTTON * sizeof(Atom)); |
| 84 | switch(nlabels) | 78 | PROPMAP(map, MT_BUTTON_LEFT, BTN_LABEL_PROP_BTN_LEFT); |
| 85 | { | 79 | PROPMAP(map, MT_BUTTON_MIDDLE, BTN_LABEL_PROP_BTN_MIDDLE); |
| 86 | default: | 80 | PROPMAP(map, MT_BUTTON_RIGHT, BTN_LABEL_PROP_BTN_RIGHT); |
| 87 | case 7: | 81 | PROPMAP(map, MT_BUTTON_WHEEL_UP, BTN_LABEL_PROP_BTN_WHEEL_UP); |
| 88 | labels[6] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_RIGHT); | 82 | PROPMAP(map, MT_BUTTON_WHEEL_DOWN, BTN_LABEL_PROP_BTN_WHEEL_DOWN); |
| 89 | case 6: | 83 | PROPMAP(map, MT_BUTTON_HWHEEL_LEFT, BTN_LABEL_PROP_BTN_HWHEEL_LEFT); |
| 90 | labels[5] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_LEFT); | 84 | PROPMAP(map, MT_BUTTON_HWHEEL_RIGHT, BTN_LABEL_PROP_BTN_HWHEEL_RIGHT); |
| 91 | case 5: | ||
| 92 | labels[4] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_DOWN); | ||
| 93 | case 4: | ||
| 94 | labels[3] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_UP); | ||
| 95 | case 3: | ||
| 96 | labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT); | ||
| 97 | case 2: | ||
| 98 | labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE); | ||
| 99 | case 1: | ||
| 100 | labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT); | ||
| 101 | break; | ||
| 102 | } | ||
| 103 | } | 85 | } |
| 104 | #endif | 86 | #endif |
| 105 | 87 | ||
| @@ -108,14 +90,11 @@ static int device_init(DeviceIntPtr dev, LocalDevicePtr local) | |||
| 108 | struct MTouch *mt = local->private; | 90 | struct MTouch *mt = local->private; |
| 109 | unsigned char btmap[DIM_BUTTON + 1]={0,1,2,3,4,5,6,7}; | 91 | unsigned char btmap[DIM_BUTTON + 1]={0,1,2,3,4,5,6,7}; |
| 110 | #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 | 92 | #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 |
| 111 | Atom btn_labels[SYN_MAX_BUTTONS] = { 0 }; | 93 | Atom axes_labels[2], btn_labels[DIM_BUTTON]; |
| 112 | Atom axes_labels[2] = { 0 }; | 94 | initAxesLabels(axes_labels); |
| 113 | 95 | initButtonLabels(btn_labels); | |
| 114 | InitAxesLabels(axes_labels, 2); | ||
| 115 | InitButtonLabels(btn_labels, SYN_MAX_BUTTONS); | ||
| 116 | #endif | 96 | #endif |
| 117 | 97 | ||
| 118 | |||
| 119 | local->fd = xf86OpenSerial(local->options); | 98 | local->fd = xf86OpenSerial(local->options); |
| 120 | if (local->fd < 0) { | 99 | if (local->fd < 0) { |
| 121 | xf86Msg(X_ERROR, "multitouch: cannot open device\n"); | 100 | xf86Msg(X_ERROR, "multitouch: cannot open device\n"); |
